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输出。
原文地址:https://www.cnblogs.com/cxw296052618/p/13646500.html