Linux下Bash编程之位置和特殊变量(四)

1.bash位置变量: 

$1, $2, ...第1个参数,第二个参数,...

shift 轮询替换,剔除

举例说明:利用脚本解释位置变量的意思,创建如下脚本:

nano shift.sh 创建一个脚本文件,新增以下内容

#!/bin/bash

#

if [ $# -lt 5 ]; then   脚本后面参数不少于5个

  echo "./shift.sh ARG1....ARG5"

  exit 5

fi

echo "ARGS:$1 $2 $3 $4 $5" 分别显示第1至第5个参数

echo $1  显示脚本后面的第一个参数

#shift   注释,默认向前剔除1个参数

shift 2  向前剔除2个参数,第3个参数变第1个参数

echo $1  虽显示脚本后面第1个参数,实际是脚本的第3个参数

shift 2  向前剔除2个参数, 第5个参数变第1个参数

echo $1  虽显示脚本后面第1个参数,实际是脚本的第5个参数

wKioL1cPMjXxwb5IAADrAi4u5dU967.jpg

./shift 1 2 3 4 5 执行结果显示如下

wKioL1cPMjWgDlRNAACW0NRKP1E980.jpg


2.bash特殊变量:

$?:执行状态码返回值 

$#:参数的个数

$*: 参数列表

$@:参数列表


举例说明:创建一个脚本,脚本后面至少跟一个参数,并且显示参数个数及列表,否则退出此脚本

vim special.sh 创建脚本文件

#!/bin/bash

#

if [ $# -lt 1 ]; then

   echo "Usage:./special.sh ARG1 [ARG2...]"

   exit 9

fi

echo "\$# is $#"  显示参数个数

echo "\$* is $*"  列表

echo "\$@ is $@"  列表

wKioL1cPOXDDRwvqAADN25GlhlE144.jpg

chmod a+x special.sh 授于执行权限

./special /etc/passwd /etc/shadow /proc

wKiom1cPONaRK7P2AAEeGNEIr_4250.jpg

3.文件测试:

-e FILE:测试文件是否存在

-f FILE: 测试文件是否为普通文件

-d FILE: 测试指定路径是否为目录

-r FILE: 测试当前用户对指定文件是否有读取权限;

-w FILE: 测试当前用户对指定文件是否有写入权限;

-x FILE: 测试当前用户对指定文件是否有执行权限;

4.脚本退出命令

  exit n  n使用0-255的退出状态码数值 

PS:如果脚本没有明确定义退出状态码,那么最后执行的一条命令的退出码即为脚本的退出状态码;

举例说明:指定一个文件:如果是一个普通文件,就显示file;如果是一个目录,显示directory;

       否则,此为无法识别的文件;请创建这样的脚本文件

vim exist.sh 创建脚本文件

#!/bin/bash

FILE=/etc/rc.d/rc.sysinit

if [ ! -e $FILE ]; then   判断文件是否存在

   echo "NO such $FILE"

   exit 88          不存在退出当前脚本,退出码为88,可在0-255之间随意写

fi


if [ -f $FILE ]; then       判断是否为文件

   echo "$FILE is file"

elif [ -d $FILE ]; then      判断是否为目录 

   echo "$FILE is directory"

else

   echo "I do not known this $FILE"  不认识的文件

fi

wKiom1cPNHaDP_eRAAEvXb4lMVI070.jpg


5.测试脚本

bash -n 脚本 语法错误检查:

bash -x 脚本:单步执行步骤


bash -x exist.sh 测试脚本执行步骤