• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    浅谈Shell脚本参数与交互及常见问题

    一、Shell编程-脚本参数与交互及常见问题

    在执行一个脚本程序时,会经常需要向脚本传递一些参数,并根据输入的参数值生成相应的数据或执行特定的逻辑。

    1.1 向脚本传递参数

    执行Shell脚本时可以带有参数,在Shell脚本中有变量与之对应进行引用。这类变量的名称很特别,分别是0、1、2、3...被称为位置变量。

    位置变量是由 0 开始,其中 0 变量预留用来保存实际脚本的名字,1 变量对应脚本程序的第 1个参数,依次类推。与其他变量一样,可以在Shell 中通过“$”符号来引用位置变量的值。

    [root@localhost 20190105]# vi paral.sh
    #!/bin/bash
    #显示脚本名
    echo 'The script name is '$0
    #显示第1个参数
    echo 'The 1th parameter is '$1
    #显示第2个参数
    echo 'The 2th parameter is '$2
    #显示第3个参数
    echo 'The 3th parameter is '$3
    #显示第4个参数
    echo 'The 4th parameter is '$4
    #显示第5个参数
    echo 'The 5th parameter is '$5
    #显示第6个参数
    echo 'The 6th parameter is '$6
    #显示第7个参数
    echo 'The 7th parameter is '$7
    #显示第8个参数
    echo 'The 8th parameter is '$8
    #显示第9个参数
    echo 'The 9th parameter is '$9
    [root@localhost 20190105]# ./paral.sh Ni hao , Nice to meet you !
    The script name is ./paral.sh
    The 1th parameter is Ni
    The 2th parameter is hao
    The 3th parameter is ,
    The 4th parameter is Nice
    The 5th parameter is to
    The 6th parameter is meet
    The 7th parameter is you
    The 8th parameter is !
    The 9th parameter is      //空值
    [root@localhost 20190105]#
    

    1.2 用户交互

    使用 read 命令可以从键盘上读取数据,然后赋给指定的变量,在Shell脚本中实现与用户的数据交互。

    read命令的格式

    read 变量1 [变量2...]
    

    read命令可以从键盘上读取到多个变量的值,用户输入数据时,数据间以空格或者 Tab键作为分隔。

    如果变量个数与输入的数据个数相同,则依次对应赋值;

    如果变量个数大于输入的数据个数,则从左到右对应赋值;如果没有数据,则以之对应的变量为空;

    如果变量个数少于输入的数据个数,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。

    通过 read 命令读取键盘上输入的数据保存到变量中,同时把变量值显示在屏幕上,当用户输入 exit 时结束程序。

    [root@localhost 20190105]# vi read1.sh
    #!/bin/bash
    #初始化变量的值
    input1=''                                               #设置 input1 变量值为空
    input2=''                                               #设置 input2 变量值为空
    input3=''                                               #设置 input3 变量值为空
    input4=''                                               #设置 input4 变量值为空
    #until 循环,当 input1 变量的值为 exit 时退出该循环
    until [ "$input1" = exit ]
    do
           echo 'Please input the values:'
    #读取键盘输入的数据
           read input1 input2 input3 input4
    #输入的不是 exit 时把用户输入的数据显示在屏幕上
           if [ "$input1" != exit ]
           then
                   echo 'input1: '$input1                  #输出变量 input1 的值
                   echo 'input2: '$input2                  #输出变量 input2 的值
                   echo 'input3: '$input3                  #输出变量 input3 的值
                   echo 'input4: '$input4                  #输出变量 input4 的值
                   echo
    #当输入为 exit 时显示退出脚本的提示
           else
                   echo 'Exit the script.'
           fi
    done
    [root@localhost 20190105]# chmod +x read1.sh
    [root@localhost 20190105]# ./read1.sh
    Please input the values:
    How do you do           //输入的数据个数与变量个数相等
    input1: How
    input2: do
    input3: you
    input4: do
    
    Please input the values:
    Welcome to beijing       //输入的数据个数小于变量个数
    input1: Welcome
    input2: to
    input3: beijing
    input4:
    
    Please input the values:
    let's go              //输入的数据个数小于变量个数
    input1: let's
    input2: go
    input3:
    input4:
    
    Please input the values:
    Nice to meet you,too!      //输入的数据个数大于变量个数
    input1: Nice
    input2: to
    input3: meet
    input4: you,too!
    
    Please input the values:    //结束程序
    exit
    Exit the script.
    [root@localhost 20190105]#
    
    

    运行结果可以看出:

    1.3 特殊变量

    特殊变量及说明

     

    [root@localhost 20190105]# vi vall.sh
    #!/bin/bash
    echo 'The value of $# is: '$#           //输出$#变量的值
    echo 'The value of $* is: '$*           //输出$*变量的值
    echo 'The value of $@ is: '$@           //输出$@变量的值
    echo 'The value of $$ is: '$$           //输出$$变量的值
    echo 'The value of $! is: '$!           //输出$!变量的值
    echo 'The value of $- is: '$-           //输出$-变量的值
    echo 'The value of $? is: '$?           //输出$?变量的值
    [root@localhost 20190105]# ./vall.sh how do you do
    The value of $# is: 4 //输出4变量的值
    The value of $* is: how do you do //输出how do you do变量的值
    The value of $@ is: how do you do //输出how do you do变量的值
    The value of $$ is: 9040 //输出9040变量的值
    The value of $! is:  //输出变量的值
    The value of $- is: hB //输出hB变量的值
    The value of $? is: 0 //输出0变量的值
    [root@localhost 20190105]#
    

    1.4 Shell编程常见问题

    1.4.1 如何屏蔽命令的输出结果

    Linux 默认会创建一个设备文件/dev/null(空设备),所有输出到该设备的信息都会被屏蔽。通过把命令的输出重定向到设备/dev/null,可以屏蔽命令的输出结果。

    命令 > /dev/null
    

    屏蔽命令的错误输出

    命令 2> /dev/null
    

    屏蔽命令的正常以及错误输出

    命令 > /dev/null 2> /dev/null
    

    例如:要在 Shell 代码中使用 grep 命令查找文件是否存在某个关键字,但是又希望屏幕 grep 命令的输出。

    if grep jack /etc/passwd > /dev/null
    then
     echo "jack found"
    fi
    

    如果 /etc/passwd 文件中有 jack 关键字的信息,将会显示 jack found,但不会输出 grep 命令的执行结果。

    1.4.2 如何把一条命令分成多行编写

    Linux 的 Shell 脚本功能非常强大,它允许用户通过管道方式把多个命令组合在一起,但因此往往也导致在一行 Shell 脚本代码中编写的命令过长,难以阅读,为了使脚本的结构更加清晰,可以把一行 Shell 脚本代码分成多行进行编写。

    使用两个管道符把ps、grep 和 awk 命令组合。

    [root@localhost ~]# ps -ef | grep sshd | awk '{print $2}'
    4478
    12821
    22028

    在一行代码中把多个命令组合在一起,难以阅读。Shell 提供了一个特殊字符“\”,可以把一行代码分成多行进行编写。

    [root@localhost ~]# ps -ef | \
    
    > grep ssh | \
    
    > awk '{print $2}'
    4478
    12821
    23375
    [root@localhost ~]#
    

    到此这篇关于浅谈Shell脚本参数与交互及常见问题的文章就介绍到这了,更多相关Shell脚本参数与交互内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

    您可能感兴趣的文章:
    • 浅谈shell脚本免交互的四大方法
    • Shell脚本之Expect免交互的实现
    • Shell脚本中非交互式修改密码的两种方法
    上一篇:Linux全网最全面常用命令整理(附实例)
    下一篇:Shell脚本中$符号的几种用法小结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    浅谈Shell脚本参数与交互及常见问题 浅谈,Shell,脚本,参数,与,