Skip to content

语法检查

bash
bash -n script.sh

作用:只检查语法不执行

执行过程追踪

bash
bash -x script.sh

输出示例

+ echo 'Hello World'
Hello World

作用:显示每条命令执行过程

分步执行

bash
# 在脚本中插入
set -e  # 遇到错误立即退出
set -o pipefail  # 管道命令失败时退出

文件判断符号

符号含义示例
-d是否为目录[ -d /tmp ] && echo "是目录"
-f是否为普通文件`[ -f file.txt ]
-e文件/目录是否存在if [ -e /path ]; then...
-s文件存在且不为空[ -s log.txt ] && cat log.txt

数值比较运算符

bash
[ $a -gt $b ]  # > 大于
[ $a -lt $b ]  # < 小于
[ $a -eq $b ]  # == 等于
[ $a -ne $b ]  # != 不等于
[ $a -ge $b ]  # >= 大于等于
[ $a -le $b ]  # <= 小于等于

注意:在(())中可直接用数学符号:(( a > b ))

脚本计算

  • expr
  • let
  • $(())
  • bc

if判断与[]条件判断差异

  1. 方括号的使用:在使用[[[时,通常需要在条件的两端留有空格,例如[ $a -eq $b ]。而在使用[[时,这种空格是可选的,这使得它更容易阅读和书写。例如[[ $a -eq $b ]]
  2. 功能增强[[[提供了更多的功能和灵活性,比如模式匹配(使用=~操作符)和字符串比较时无需引号包围变量等。
bash
# if与[]的区别:
if语句是bash(和其他一些shell,如sh)中的基本控制结构之一,用于根据条件执行代码块
if [ -f file ]    # []是test命令的另一种形式,需要空格
if [[ $str == *pattern* ]]  # 支持通配符匹配

# 现代脚本推荐使用:
[[ -e path ]] && cmd   # 双中括号更安全

控制结构语法

if语句

bash
if [ condition ]; then
    commands
elif [ condition2 ]; then
    commands
else
    commands
fi

循环结构

bash
# for循环
for i in {1..5}; do echo $i; done

# while按行读取
while IFS= read -r line; do
    echo "$line"
done < file.txt

# 死循环
while true; do
    date
    sleep 1
done

case语句

bash
case $var in
    start) echo "Starting..." ;;
    stop)  echo "Stopping..." ;;
    *)     echo "Unknown command" ;;
esac

函数定义

bash
function_name() {
    local var="value"  # 局部变量
    return $?
}

流程控制关键字

关键字作用范围示例
exit终止整个脚本[ -z $1 ] && exit 1
return退出函数return 0
break跳出当前循环while true; do break; done
continue跳过本次循环for i in {1..3}; do continue; echo $i; done