Shell编程中的用户输入处理(2):处理命令行参数(选项、参数)

前端之家收集整理的这篇文章主要介绍了Shell编程中的用户输入处理(2):处理命令行参数(选项、参数)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

2. 命令行参数(选项、参数)

2.1 读取命令行参数

读取参数时,注意以下几点:

  • 用空格分割各个参数

  • 位置参数$position:$0、$1、$2...,其中$0:0号位置参数是调用shell脚本的程序名;$1、$2、$3 ~ $9:命令行传递的位置参数;${10}...:对于多于10个(含)的位置参数,要添加{}引用

例1:命令行位置参数少于10个,脚本param1如下

  1. # !/bin/bash # 指定shell类型
  2.  
  3. echo "the cmd is $0" # 通过$0,输出程序名(脚本名);程序命名可以为param1.sh或param1
  4. echo "The #1 param is $1"
  5. echo "The #2 param is $2"
  6.  
  7. SUM=$[ $1 + $2 ]
  8.  
  9. echo "The result is $SUM"
  1. # chmod +x param1 # 修改脚本执行权限
  2.  
  3. # ./param1 1 2 # 运行脚本,并输入两个参数:12
  4. # 运行脚本可以为./脚本名,相对路径/脚本名,绝对路径/脚本名

例2:命令行位置参数多于10个,脚本param2如下

  1. # !/bin/bash # 指定shell类型
  2.  
  3. echo "The #1 param is $1"
  4. echo "The #2 param is $2"
  5. echo "The #10 param is ${10}"
  6.  
  7. SUM=$[ $1 + $2 + ${10} ]
  8.  
  9. echo "The result is $SUM"
  1. # chmod +x param2 # 修改脚本执行权限
  2.  
  3. # ./param2 1 2 3 4 5 6 7 8 9 10 11 # 运行脚本,并输入11个参数

2.2 获取命令名

例1:使用basename获取不带路径的程序名,脚本read_cmd_name如下

  1. # !/bin/bash
  2.  
  3. echo `basename $0` # 其中``是反引号,不是单引号''
  1. # chmod +x read_cmd_name
  2.  
  3. # ./read_cmd_name

例2:使用一个shell脚本,判断多个cmd输入命令

  1. # !/bin/bash # 指定shell类型
  2.  
  3. name=`basename $0` # 变量名、=、表达式,三者之间不能有空格
  4.  
  5.  
  6. if [ $name = add ]
  7. then
  8. result=$[ $1 + $2 ] # 变量名、=、表达式,三者之间不能有空格
  9. elif [ $name = sub ]
  10. then
  11. result=$[ $1 - $2 ] # 变量名、=、表达式,三者之间不能有空格
  12. fi
  13.  
  14.  
  15. echo "the $name result is $result"

使用命令basename获取程序名,可用于实现输入命令的判断:当命令行输入不同命令时,首先建立命令到脚本的软连接,然后命令在脚本内部判断执行,从而实现输入命令筛选。

  1. # ln -s link_to_exe add # 把basename脚本链接到add
  2.  
  3. # ln -s link_to_exe sub # 把basename脚本链接到sub
  4.  
  5. # ./add 3 4 # 输入判断
  6.  
  7. # ./sub 3 6

2.3 特殊变量

几个命令行特殊变量

  • echo $#

  • echo $*

  • echo $@

查看特殊变量的类型

  1. # !/bin/bash # 指定shell类型
  2.  
  3. echo $# # 参数计数,显示输入了几个位置参数
  4. echo $* # 显示输入的所有参数
  5. echo $@ # 显示输入的参数列表
  6. echo
  7.  
  8.  
  9. for var in "$#" # $#是一个变量
  10. do
  11. echo "\$# param-$var" # \后的$不转义
  12. done
  13.  
  14. for var in "$*" # $*是一个变量
  15. do
  16. echo "\$* param-$var"
  17. done
  18.  
  19. for var in "$@" # $@是一个列表
  20. do
  21. echo "\$@ param-$var"
  22. done

输出结果

  1. # ./special_variable 1 asd 1$ as1

猜你在找的Bash相关文章