美文网首页
Shell 从放弃到入门

Shell 从放弃到入门

作者: winter_sweetie | 来源:发表于2019-11-16 21:26 被阅读0次

    2019年11月16日更新

    嘿,相信你一定见过 xxx.sh 这样的脚本文件, 没准你还有模有样地敲下./xxx.sh这样的语句来让它run起来。

    但是你真的知道./是什么神奇的操作吗,文件里echo$1等等奇怪的字符代表什么吗,什么时候要在运行时加参数呢。

    让我们一起来探索shell的世界吧!

    ps: 学习源是菜鸟教程

    1. hello world

    1.1 创建

    使用vi/vim创建文件,写下我们第一个shell脚本

    #!/bin/bash
    echo "Hello World !"
    

    其中,#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。我们这里使用的是Bash,它也是大多数Linux默认的Shell。

    echo 用来输出字符串,在这里加不加双引号都行。printf也有同样的功能,而且还能进行强大的格式化输出。

    1.2 运行

    先cd到相应目录,然后执行

    chmod +x ./test.sh  #使脚本具有执行权限
    ./test.sh  #执行脚本
    

    注意,一定要写成·./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

    2. 变量

    your_name="Jack"
    echo "Hello, $your_name"
    echo "Hello, ${your_name}"
    

    使用变量的时候才加美元符($),定义时不用。

    变量名外面加花括号是为了帮助解释器识别变量的边界。推荐给所有变量加上花括号,这是个好的编程习惯。

    单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的。双引号里可以有变量,还可以出现转义字符。

    定义数组的格式是

    array_name=(value0 value1 value2 value3)
    

    读取数组元素值的一般格式是:

    valuen=${array_name[n]}
    

    3. 传递参数

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,其中$0为执行的文件名,$1 为执行脚本的第一个参数,$2 为执行脚本的第二个参数,以此类推……

    输入

    echo "Shell 传递参数实例!";
    echo "第一个参数为:$1";
    
    echo "参数个数为:$#";
    echo "传递的参数作为一个字符串显示:$*";
    

    执行脚本,输出结果如下所示:

    $ chmod +x test.sh 
    $ ./test.sh 1 2 3
    Shell 传递参数实例!
    第一个参数为:1
    参数个数为:3
    传递的参数作为一个字符串显示:1 2 3
    

    * 与@ 区别:

    • 相同点:都是引用所有参数。
    • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

    4. 流程控制

    4.1 if

    4.1.1 if

    if condition
    then
        command1 
        command2
        ...
        commandN 
    fi
    

    4.1.2 if else

    if condition
    then
        command1 
        command2
        ...
        commandN
    else
        command
    fi
    
    

    4.1.3 if else-if else

    if condition1
    then
        command1
    elif condition2 
    then 
        command2
    else
        commandN
    fi
    

    4.3.4 实例:判断两个变量是否相等

    a=10
    b=20
    if [$a == $b]
    then
        echo "a 等于 b"
    elif [$a -gt $b]
    then
       echo "a 大于 b"
    elif [ $a -lt $b ]
    then
       echo "a 小于 b"
    else
       echo "没有符合的条件"
    fi
    

    注意,代码中[]执行基本的算术运算,如

    a=5
    b=6
    
    result=$[a+b] # 注意等号两边不能有空格
    echo "result 为: $result"
    

    4.2 for

    for var in item1 item2 ... itemN
    do
        command1
        command2
        ...
        commandN
    done
    

    in列表可以包含替换、字符串和文件名。

    4.3 while

    while condition
    do
        command
    done
    

    while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按<Ctrl-D>结束循环。

    echo '按下 <CTRL-D> 退出'
    echo -n '输入你最喜欢的网站名: '
    while read FILM
    do
        echo "是的!$FILM 是一个好网站"
    done
    

    相关文章

      网友评论

          本文标题:Shell 从放弃到入门

          本文链接:https://www.haomeiwen.com/subject/zphuictx.html