1 位置参数
#!/bin/bash
echo $1,$2
注意:当有两个$符号时,只能接受两个参数,后面输入的不会被接收;
如果用双引号括起来则代表一个参数。
多个参数
#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19
注意:位置参数的数字大于9时,输出的内容就会出错,因为解释器会把10当作0和1两个数字来对待,故当位置参数的数字大于9时,需要用花括号将数字括起来。
#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15} ${16} ${17} ${18} ${19}
2 获取脚本的名称及路径
#!/bin/bash
echo $0
注意:在使用$0时:
(1)如果使用相对路径来执行脚本时,输出结果就是脚本名字;
(2)如果使用绝对路径来执行脚本时,那么输出结果就是绝对路径加上脚本名。
#!/bin/bash
dirname $0
basename $0
若不带路径执行脚本,输出结果为".",表示当前路径;
若使用绝对路径来执行脚本,输出结果就是脚本的绝对路径。
3 获取脚本传参的个数
#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
echo $#
在这里,我们传递了26个参数,但是由于我们在脚本中只设置了接受了10个参数,故只接收了了9个变量,所以最后打印了9个字符。
4 set设置位置参数
set -- 参数
5 $*和$@
的对比
#!/bin/bash
foo(){
echo $*
}
bar(){
echo $@
}
foo 1 2 3 4
bar 1 2 3 4
相同点:$*和$@
都表示参数列表中所有的参数
#!/bin/bash
test(){
echo "未加引号,二者相同"
echo $*
echo $@
echo "加入引号后的比较"
echo "----------"
for N in "$*"
do
echo $N
done
echo "##########"
for N in "$@"
do
echo $N
done
}
test 44 55 66
不同点:当$*和$@
被双引号包含时,$*
会将所有的参数作为一个整体输出,而$@
会将参数分开输出。
6 shift造成参数变量号码偏移
shift命令用于对于参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数,然后进行相应处理。
#!/bin/bash
while [ $# != 0 ];do
echo "第一个参数为:$1,参数的个数为:$#"
shift
done
shift命令每执行一次,变量的个数就减一;
7 $?获取函数的返回值
当一个进程执行完毕后,该进程会提供一个退出码(一个整数)表明它准备退出的原因。类似于布尔变量,0表示成功,当我们执行echo $?时返回的值就是进程的结束码,这个结束码由刚刚执行完的进程提供给系统内核的。
#!/bin/bash
if [ "$1' == 50 ]
then
exit 0 #参数正确 退出状态为0
else
exit 1 #参数不正确 退出状态为1
fi
$?是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值。
#!/bin/bash
add(){
return `expr $1 + $2`
}
add 50 100
echo $?