什么是命令行参数(读取shell命令行中的参数)
shell脚本通过美元符号$读取命令行中的参数,比如$0表示程序名,$1表示第一个参数,$2表示第二个参数,${10}表示表示第10个参数,以此类推。建立脚本test34.sh如下:
#/bin/bash
total=$[ $1 * $2 + $3 ]
echo "$1 * $2 + $3 = $total"
运行如下:
./test34.sh 4 5 6
结果如下:
4 * 5 + 6 = 26
当把字符串输入给shell脚本的时候,注意是以空格作为分隔符,如果字符串本身就有空格的话,那么用双引号或者单引号,比如
#/bin/bash
echo "$1 is pretty nice!"
运行如下:
./test35.sh "wu lin wai zhuan"
结果如下:
wu lin wai zhuan is pretty nice!
$0是程序名,这个程序名是运行时输入的完整路径,而不是文件名,比如下面的:
#/bin/bash
echo "shell path is $0"
运行输入:
bash shell/test36.sh
结果如下:
shell path is shell/test36.sh
如果想要只截取出文件名的话可以使用basename命令,这个命令会返回不包含前面路径的程序名,如脚本test37.sh
#/bin/bash
shellName=$(basename $0)
echo "shell path is $shellName"
运行输入:
bash shell/test37.sh
结果如下:
shell path is test37.sh
通过basename指令,我们可以通过脚本名来处理相应的逻辑,比如建立一个shell脚本,然后创建两个不同名字的链接,让这两个链接处理不同的逻辑。建立脚本test38.sh如下:
#/bin/bash
name=$(basename $0)
if [ $name = "add" ];then
res=$[ $1 + $2 ]
elif [ $name = "mul" ];then
res=$[ $1 * $2 ]
fi
echo "$0 -> result is $res"
然后,创建两个链接文件:
ln -s test38.sh add
ln -s test38.sh mul
输入:
./add 4 4
运行结果为:
./add -> result is 8
输入:
./mul 5 6
运行结果为:
./mul -> result is 30