目录
脚本书写规范及注意点
-
在vscode中写脚本,加上必要的双引号有助于理解和分析代码,梳理明白逻辑;
-
添加执行权限,添加一次后,后续就不用修改了;
-
最后验证功能;
内建命令
凡是通过which命令查不到程序文件所在位置的命令
帮助手册:man bash-builtins
变量
环境变量
本地变量
脚本中定义的变量是全局变量
局部变量:local 变量名 函数内部使用
函数
定义及使用
[function] 函数名 () { command } 返回值和c中一样,正确返回0,错误返回非0
参数处理
$#:参数的个数,不包括命令本身
$0:进程名,相当于C中的argv[0]
$1:第一个参数
$@:参数列表
$*:参数列表
$$:进程id
$?:上一行命令的退出状态,0表示成功,非0表示失败
条件判断
if
普通逻辑判断
VAR=2
if [ $VAR -gt 2 ]; then
echo "gt"
fi
字符串比较:
if [ -n "${var1}" ]; then echo "ffff" fi if [ -z "${var1}" ]; then echo "gggg" fi 进行字符串比较时,使用[[ ]]非常方便,不用考虑转义的情况,如: if [ "fang" \< "gong" ]; then echo "fang < gong" fi if [[ "fang" < "gong" ]]; then echo "fang < gong" fi
文件判断:
-d 文件 判断该文件是否存在,并且是否为目录 -e 文件 判断该文件是否存在(存在为真) -f 文件 判断该文件是否存在,并且是否为普通文件
复杂逻辑判断
-a 与 -o 或 ! 非
case
case 值 in 模式1 | other1) command ;; 模式2 | other2) command ;; *) command ;; esac
循环判断
while
i=0 while [ $i -lt 10 ]; do command done
for
显示家目录下所有以.bash开头的文件 for FILE in $HOME/.bash* do echo $FILE done
echo
echo -n 换行 echo -e 处理转义字符
Shell 中获取命令结果问题
在shell 中获取命令的执行结果:
ETHTOOL="/root/bin/ethtool" INTERFACE_NAME="eth0" result=`${ETHTOOL} ${INTERFACE_NAME}`
而如果仅仅执行命令,就不用倒引号包含了:
ETHTOOL="/root/bin/ethtool" INTERFACE_NAME="eth0" MATCH_PATTERN="Speed: 10Mb/s" ${ETHTOOL} ${INTERFACE_NAME} | grep "${MATCH_PATTERN}" 1>/dev/null 2>/dev/null
调试
-n 检查语法错误