shell小笔记
echo $@
echo $*
echo aaa="${USER}"
echo bbb='${USER}'
echo ccc="$USER"
echo $((1+2))
CMD=(10,20,)
CMD+=1
echo "${CMD}"
echo "$(printf ${CMD[@]})"
echo "$((${#CMD[@]}+1))"
echo '${CMD}'
echo `date`
while read FILM
do
echo "Yeah! great film the $FILM"
done
特殊变量
- $@:传递给函数/脚本的所有参数;
- $*:传递给函数/脚本的所有参数,与上面不同的是,如果用“”扩起来参数,该符号不会split开;
- $#:统计所有参数的长度;
- $n:获取第n个参数,当n大于10时,需使用${n};
- $?:获取上个命令的输出结果,一般获取函数return的结果;
文件检测运算符
- -d:是否为目录;
- -r:是否可读;
- -w:是否可写;
- -x:是否可执行;
- -e:是否存在;
- -s:是否文件内容为空;
特殊符号
- -o:或;
- -a:与;
- -z:字符串长度是否为0;
- -n:字符串长度是否不为0;
语法注解
${String/Array: Findex :Lindex} :根据下标范围获取部分字符/数组;
set -uexo pipefail
- u:不存在变量报错退出;
- x:命令执行详细输出,debug专用;
- e:发生错误,停止执行,管道无用, set +e 可关闭该功能,可在代码段前后设置,跳过该功能;
- o pipefail:管道中命令失败报错退出;
unset :删除函数和变量
&0/1/2
- 0: 标准输入;
- 1: 标准输出;
- 2: err输出。