Shell学习

第1次课-Shell脚本语言-第1讲

2017-11-11  本文已影响14人  泰克2008

进入Shell语言基础学习?

1、第一个Shell程序?

1.1 创建Shell文件
    命令:touch hello.sh
1.2 编写Shell程序
    定义文件声明
    #!/bin/bash
    echo "Hello world!"

    #!:表示约定标记,他会告诉系统这个脚本需要什么样子的解释器来执行,既是一种脚本体现。
    echo:表示命令用于输出文本信息

1.3 修改文件权限
    1.3.1 权限结构
        分为了4个部分(QQ群为例)
        第一部分:文件类型->QQ群类型
        第二部分:文件所有者->群主
        第三部分:所有者同组用户->管理员
        第四部分:其他用户->群成员

    1.3.2 查看每一个部分权限
        查看文件权限
        命令:ls -l hello.sh
            -rw-r—r--
    1.3.3 修改文件权限
        命令: chmod +x ./hello.sh
            -rwxr-xr-x

1.4 执行Shell脚本文件
    命令:./hello.sh

2、Shell脚本语法->注释?

”#“->表示注视
例如:
    脚本代码
        #!/bin/bash
        # 输出了Hello world!
        echo "Hello world!"
注意:在Shell脚本中,没有多行注释,只有单行注释

3、Shell脚本语言->变量

3.1 变量定义->注意事项
    注意一:定义变量时候,变量名处不需要加"$"符号
    注意二:变量名和等号不能够有空格(和我们的一般语言不一样)
    注意三:变量名首字母必需是字母+下划线(a-z、A-Z)
    注意四:变量名中间不允许有空格
    注意五:不允许使用标点符号
    …细节
3.2 只读变量
    关键字:readonly(只读,不能够修改)
    脚本代码
        name="HelloApp"
        readonly name
        #./hello.sh: line 35: name: readonly variable
        name="smile2017"
        echo "执行了"

3.3 删除变量?
    语法:unset(干掉了)
    案例:unset 变量名

3.4 变量类型
    3.4.1 类型一:本地变量
        作用域整个bash进程可以使用
        语法:name="Dream"
    3.4.2 类型二:局部变量
        作用域:当前代码段(修饰符:local)
        local name="Andy"
    3.4.3 类型三:环境变量
        作用域:当前shell进程以及子进程
        语法:export name="Dream"
    3.4.4 类型四:位置变量
        脚本代码
            #!/bin/bash
            name=${0}
            age=${1}
            sex=${2}
            echo "姓名:${name}   年龄:${age}  性别:${sex} "
        执行脚本
            ./hello.sh Jeff 150 男
        执行结果
            ${0}表示脚本文件名称
            参数从1开始
    3.4.5 特殊变量
        3.4.5.1 ${0}->特殊变量->文件名称
        3.4.5.2 ${?}->表示返回上一个命令执行状态返回值
            0:表示执行成功
            1:程序执行结果
            2:表示程序状态返回码(0-255)
                系统预留错误(1、2、127)
            案例测试
                #!/bin/bash
                echo ${0}
                echo ${?}
        
        3.4.5.3 $#->参数个数

        3.4.5.4 $*->参数列表

        3.4.5.5 $@->参数列表

        3.4.5.6 $$->获取当前shell进行ID

        3.4.5.7 $!->执行上一个指令PID

        3.4.5.8 ${*}和${@}区别?
            脚本代码
                #!/bin/bash
                echo ${*}
                echo ${@}
            执行脚本
                ./hello.sh Andy 200 男
            脚本结果
                ${*}->参数列表:将所有的参数组成一个字符串->"Andy 200 男"
                ${@}->参数列表:分开的->"Andy" 200 "男"

4、Shell脚本语言->字符串?

4.1 字符串->单引号
    脚本代码
        #!/bin/bash
        name='Andy'
        echo ${name}
                
    
    脚本结果:Andy

4.2 字符串->双引号
    脚本代码
        #!/bin/bash
        name="Andy"
        echo ${name}

    
    脚本结果:Andy

4.3 字符串->拼接
    方式一:
        脚本代码
            #!/bin/bash
            name="Andy"
            age=100
            sex="男"
            info="${name} ${age} ${sex}"
            echo ${info}

    
        脚本结果:"Andy 100 男"
    方式二
        脚本代码
            #!/bin/bash
            name="Andy"
            age=100
            sex="男"
            info=" 姓名:"${name}"   年龄:"${age}"  性别:"${sex}"  "
            echo ${info}
                
    
        脚本结果:"姓名:Andy 年龄:100 性别:男"

4.4 字符串->获取字符串长度
    语法结构:${#变量名}
    脚本代码
        #!/bin/bash
        name="Andy"
        echo ${#name}
    脚本结果:4

4.5 字符串->截取
    语法:${变量名:开始位置:截取长度}
    脚本代码
            #!/bin/bash
            name="I have a Dream"
    案例一:从字符串第3个开始截取,截取3个
        name="I have a Dream"
        result=${name:2:3}
        echo ${result}
    案例二:从字符串第5个开始截取,到最后一个结束
        方式一
            name="I have a Dream"
            length=${#name}
            result=${name:5:length-1}
            echo ${result}
        方式二
            name="I have a Dream"
            result=${name:5}
            echo ${result}
4.6 字符串->删除
    语法一:${变量名#删除字符串 正则表达式}
        作用:从字符串开头(左边)开始匹配要删除字符串
        案例一:
            name="I have a Dream"
            result=${name#Dream}
            echo ${result}
            原因:匹配不到
        案例二:
            name="I have a Dream"
            result=${name#I}
            echo ${result}
        案例三:查找指定字符第一个,并且删除前面所有的字符(包含自己)
            name="I have a Dream"
            result=${name#*D}
            echo ${result}

        案例四:指定删除范围
            name="I have a Dream"
            result=${name#h*D}
            echo ${result}

    语法二:${变量名##删除字符串 正则表达式}
        作用:从字符串结尾(右边)开始匹配要删除字符串
        案例一
            name="I have a Dream"
            result=${name##*a}
            echo ${result}
        总结:语法一和语法二,都是从左边删除到右边,查找方向不一样

    语法三:${变量名%删除字符串 正则表达式}
        从字符串结尾开始匹配,删除匹配的字符串
        案例一:查找第一个字符(匹配第一个)
            代码一:
                name="I have a Dream"
                result=${name%a}
                echo ${result}
            代码二:
                name="I have a Dream"
                result=${name%m}
                echo ${result}

        案例二:查找指定字符第一个,并且删除前面所有字符(包含自己)
            name="I have a Dream"
            result=${name%h*}
            echo ${result}

        案例三:指定删除范围
            name="I have a Dream"
            result=${name%a*D}
            echo ${result}

    语法四:${变量名%%删除字符串 正则表达式}
        案例一:查找指定字符最后一个,并且删除前面所有的字符(包含自己)
            name="I have a Dream"
            result=${name%%a*}
            echo ${result}

    总结:
        从左边删除到右边
            #->表示查询方向从左到右
            ##->表示查询方向从右到左
        从右边删除到左边
            %->表示查询方向从右到左
            %%->表示查询方向从左到右
上一篇下一篇

猜你喜欢

热点阅读