在传递参数方面,我们需要掌握几个常用的,通常是在编写shell脚本的时候进行使用。
$n
使用$n表示调取命令行的第n个参数,例如
输入:bash examle.sh 2 3 4
此时在脚本中,$1表示调取第一个参数即2。
几个需掌握的特殊参数
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
$* 与 $@ 区别
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。即两个一个是传递一连串,一个是传递好多个。
一道shell脚本练习一下
编写一个shell脚本,实现以下功能:
(1)要求用户输入正整数(随便多少个)
(2)计算前5个正整数的和,如果用户输入的不足5个,则计算所有输入的正整数的和。
#!/usr/bin/bash
a=0
sum=0
for i in $*
do
sum=`expr $sum + i`
a=`expr $a + 1`
if [ $a -eq 5 ]
then
break
else
continue
fi
done
echo result is $sum
这道题它是一个求和问题,并且是有条件的求和问题。
思路:先完成求和,再加条件限制
利用$*和for,进行对命令行参数的遍历。sum记录和,a记录参数的个数。如何利用if判断是否到了第五个,完成答题。