shell script的默认变量($0,$1...)

版权声明:happymaya.cn https://blog.csdn.net/Steve_Hao/article/details/84478801

Linux的命令可以带有参数,例如ls -al可以查看包含隐藏文件的所有属性与权限。那么shell script能不能在脚本文件名后面带有参数呢。举例子:重启系统注册表文件的功能:

上面的命令可以重新启动/etc/init.d/network这个程序。如果在其后面加个stop呢,很明显,就可以直接关闭该服务了!

如果想要依据程序的执行给予一些变量去进行不同的任务时(虽然可以使用read命令,但是需要手动键盘输入一些判断式),就可以通过命令后面接参数,那么一个命令就能够处理完毕而不需要手动再次输入一些变量行为!这样执行命令会比较简单方便。

script怎样实现这个功能呢?script针对参数已经有设置好一些变量名称了!对应如下:

/path/to/scriptname opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4

执行脚本文件名为$0这个变量,第一个接的参数就是$1。因此只要合理在script里面善用$1,就可以很简单地立即执行某些命令功能了!除了这些数字的变量之外,还有一些比较特殊的变量可以在script内使用来调用这些参数。

  • $#:代表后面接的参数的“个数"
  • $@:代表“$1”,"$2","$3","$4"之意,每个变量都是独立的(用引号括起来)
  • $*:代表“"$1c$2c$3c$4"”,其中c为分隔符,默认为空格键,所以本例中代表“"$1 $2 $3 $4"”之意

上面的$@和$*基本上还是有所不同的。不过,一般使用情况下可以直接记为$@就可以!

栗子:假设要执行一个携带参数的script,执行该脚本后屏幕会显示如下的数据:

  • 程序的文件名
  • 共有几个参数
  • 若参数的个数小于2则告知用户参数数量太少
  • 全部的参数内容
    • 第一个参数
    • 第二个参数
#!/bin/bash
# Program:
#       Program shows the secript name,parameters...
# History:
# 2018/11/25 steve First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

echo "The script name is        ==> $0"
echo "Total paramter number is  ==> $#"
[ "$#" -lt 2 ] && echo "The number of number paramter is less than 2. Stop here." \ && exit 0
echo "Your whole parameter is ==> '$@'"
echo "The 1st parameter  ==> $1"
echo "The 2nd parameter  ==> $2" 

执行结果如下:

  • shift:造成参数变量号码偏移
    • 除此之外,脚本后面所接的变量是否能够进行偏移(shift)呢?什么是偏移?见下面的代码,将sh07.sh稍作修改,用来显示每次偏移后参数的变化情况。 
#!/bin/bash
# Program:
#       Program shows the secript name,parameters...
# History:
# 2018/11/25 steve First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

echo "Total paramter number is  ==> $#"
echo "Your whole parameter is ==> '$@'"
shift # 进行第一次“一个变量的shift”
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
shift 3 # 进行第二次“三个变量的shift”
echo "Total paramter number is ==> $#"
echo "Your whole parameter is ==> '$@'" 

执行结果如下:

从上面的执行结果就可以看出,shift会移动变量,并且shift后面可以接数字,代表拿掉最前面的几个参数的意思。上面的执行结果中,第一次进行shift后面它的显示情况是“two three four five six",就剩五个参数了!第二次直接拿掉三个,就变成“two three four five six”。这样这个案例就解释shift的作用了。

猜你喜欢

转载自blog.csdn.net/Steve_Hao/article/details/84478801