• 《Shell脚本学习 —— Shell传递参数、echo命令、test命令》


    1.Shell传递参数

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

    实例:

    以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径):

    #!/bin/bash
    
    echo "Shell 传递参数实例!";
    echo "执行的文件名:$0";
    echo "第一个参数为:$1";
    echo "第二个参数为:$2";
    echo "第三个参数为:$3";
    

    为脚本设置可执行权限,并执行脚本,输出结果如下所示:

    $ chmod +x test.sh 
    $ ./test.sh 1 2 3
    Shell 传递参数实例!
    执行的文件名:./test.sh
    第一个参数为:1
    第二个参数为:2
    第三个参数为:3
    

    另外,还有几个特殊字符用来处理参数:

    #!/bin/bash
    
    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"(传递了三个参数)。

    #!/bin/bash
    
    echo "-- $* 演示 ---"
    for i in "$*"; do
        echo $i
    done
    
    echo "-- $@ 演示 ---"
    for i in "$@"; do
        echo $i
    done
    

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

    $ chmod +x test.sh 
    $ ./test.sh 1 2 3
    -- $* 演示 ---
    1 2 3
    -- $@ 演示 ---
    1
    2
    3
    

      在为shell脚本传递的参数中如果包含空格,应该使用单引号或者双引号将该参数括起来,以便于脚本将这个参数作为整体来接收

    if [ -n "$1" ]; then
        echo "包含第一个参数"
    else
        echo "没有包含第一参数"
    fi
    

      注意:中括号 [] 与其中间的代码应该有空格隔开。

    2.Shell echo命令

    2.1 显示普通字符串

    echo "It is a test"
    

    这里的双引号完全可以省略,以下命令与上面实例效果一致:

    echo It is a test
    

      

    2.2 显示转义字符

    echo ""It is a test""

    结果将是:

    "It is a test"
    

      

    2.3 显示变量

      read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量

    #!/bin/sh
    read name 
    echo "$name It is a test"
    

    以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:

    [root@www ~]# sh test.sh
    OK                     #标准输入
    OK It is a test        #输出
    

      

    2.4 显示换行

    echo -e "OK! 
    " # -e 开启转义
    echo "It is a test"
    

    输出结果:

    OK!
    
    It is a test
    

      

    2.5 显示不换行

    #!/bin/sh
    echo -e "OK! c" # -e 开启转义 c 不换行
    echo "It is a test"
    

    输出结果:

    OK! It is a test
    

      

    2.6 显示结果定向到文件

    echo "It is a test" > myfile
    

      

    2.7 原样输出字符串,不进行转义或取变量

    echo '$name"'
    

    输出结果:

    $name"
    

      

    2.8 显示命令执行结果

    echo `date`
    

      注意: 这里使用的是反引号 `, 而不是单引号 '。

    结果将显示当前日期:

    Thu Jul 24 10:08:46 CST 2014
    

      

    3. Shell test命令

      Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

     实例:

    num1=100
    num2=100
    if test $[num1] -eq $[num2]
    then
        echo '两个数相等!'
    else
        echo '两个数不相等!'
    fi
    

    输出结果:

    两个数相等!
    

    代码中的 [] 执行基本的算数运算,如:

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

    结果为:

    result 为: 11
    

      

     实例:

    num1="ru1noob"
    num2="runoob"
    if test $num1 = $num2
    then
        echo '两个字符串相等!'
    else
        echo '两个字符串不相等!'
    fi
    

    输出结果:

    两个字符串不相等!
    

      

     实例:

    cd /bin
    if test -e ./bash
    then
        echo '文件已存在!'
    else
        echo '文件不存在!'
    fi
    

      

  • 相关阅读:
    gulp-rev + gulp-rev-collector解决前端缓存
    NSIS ERROR解决方法
    tortoiseGit教程(常用图文教程)
    Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.解决办法
    Windows之——pid为4的system进程占用80端口的解决办法
    小程序直播开发
    微信小程序直播接入指南
    解决网易云因版权无法生成外链歌单
    小程序之点击下载图片到本地
    PS 有哪些小技巧让你好用到哭?
  • 原文地址:https://www.cnblogs.com/zhuangquan/p/13536299.html
Copyright © 2020-2023  润新知