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个参数
./shift 1 2 3 4 5 执行结果显示如下
2.bash特殊变量:
$?:执行状态码返回值
$#:参数的个数
$*: 参数列表
[email protected]:参数列表
举例说明:创建一个脚本,脚本后面至少跟一个参数,并且显示参数个数及列表,否则退出此脚本
vim special.sh 创建脚本文件
#!/bin/bash
#
if [ $# -lt 1 ]; then
echo "Usage:./special.sh ARG1 [ARG2...]"
exit 9
fi
echo "\$# is $#" 显示参数个数
echo "\$* is $*" 列表
echo "\[email protected] is [email protected]" 列表
chmod a+x special.sh 授于执行权限
./special /etc/passwd /etc/shadow /proc
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
5.测试脚本
bash -n 脚本 语法错误检查:
bash -x 脚本:单步执行步骤
bash -x exist.sh 测试脚本执行步骤