首页 > 代码库 > 每天写点shell--命令行参数
每天写点shell--命令行参数
1、读取参数:位置参数变量是标准的数字: $0是程序名, $1是第一个参数, $2是第二个参数...
1 #!/bin/bash 2 # using one command line parameter 3 4 factorial=1 5 for (( number = 1; number <= $1; number++ )) 6 do 7 factorial=$[ $factorial * $number ] 8 done 9 echo The factorial of $1 is $factorial
执行:
# ./test1.sh 5 The factorial of 5 is 120
2、输入多个命令行选项,则在命令行上每个参数都必须用空格分开:
1 #!/bin/bash 2 # testing two command line parameters 3 4 total=$[ $1 * $2 ] 5 echo The first parameter is $1 6 echo The second parameter is $2 7 echo The total value is $total
执行:
# ./test2.sh 3 4 The first parameter is 3 The second parameter is 4 The total value is 12
3、如果脚本需要多个9个命令行参数,在变量数字周围加花括号:
1 #!/bin/bash 2 # handling lots of parameters 3 4 total=$[ ${10} * ${11} ] 5 echo The tenth parameter is ${10}. 6 echo The eleventh parameter is ${11}. 7 echo The total is $total
执行:
# ./test4.sh 1 2 3 4 5 6 7 8 9 10 11 The tenth parameter is 10. The eleventh parameter is 11. The total is 110
4、测试参数
1 #!/bin/bash 2 # testing parameters before use 3 4 if [ -n "$1" ] # -n 参数测试 $1(第一个参数)是否为null 5 then 6 echo Hello $1, glad to meet you. 7 else 8 echo "Sorry, you did not identify yourself" 9 fi
执行:
# ./test7.sh Sorry, you did not identify yourself ./test7.sh frank Hello frank, glad to meet you.
5、特殊参数变量(参数计数 $#)
1 #!/bin/bash 2 # getting the number of parameters 3 echo There were $# parameters supplied.
执行:
# ./test8.sh There were 0 parameters supplied.
./test8.sh 1 2 3
There were 3 parameters supplied.
6、使用参数前测试参数的总数
1 #!/bin/bash 2 # testing parameters 3 4 if [ $# -ne 2 ] 5 then 6 echo Usage: test a b 7 else 8 total=$[ $1 + $2 ] 9 echo The total is $total 10 fi
执行:
# ./test9.sh 1 2 The total is 3
# ./test9.sh
Usage: test a b
7、不需要知道有多少个参数个数,抓取最后一个参数 ${!#}
1 #!/bin/bash 2 params=$# 3 echo The number of parameter is $params 4 echo The last parameter is ${!#}
执行:
# sh test10.sh 1 2 3 4 4 The number of parameter is 5 #参数的总个数
The last parameter is 4 #最后一个参数的值
8、$* $@变量提供了对所有参数的快速访问, $*变量会将命令行上提供的所有参数当作单个单词保存,$@变量会将命令行上提供的所有参数当做同一个字符串中多个独立的词。
1 #!/bin/bash 2 # testing $* and $@ 3 4 echo "Using the \$* method: $*" 5 echo "Using the \$@ method: $@"
执行:
# ./test11 rich katie jessica Using the $* method: rich katie jessica Using the $@ method: rich katie jessica
差异:
1 #!/bin/bash 2 # testing $* and $@ 3 count=1 #赋值的时候注意不要有空格 4 for param in "$*" 5 do 6 echo "\$* parameter #$count = $param" 7 count=$[ $count + 1 ] 8 done 9 10 count=1 11 for param in "$@" 12 do 13 echo "\$@ parameter #$count = $param" 14 count=$[ $count + 1 ] 15 done ~
执行:
# ./test12.sh rich barbara katie jessica $* parameter #1 = rich barbara katie jessica $@ parameter #1 = rich $@ parameter #2 = barbara $@ parameter #3 = katie $@ parameter #4 = jessica
可见, $*会将所有的参数当成单个单数,而$@变量会单独处理每个参数。
每天写点shell--命令行参数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。