Bash语法

更新于 2024-05-28

多行文件写入

cat > ./test <<EOF
lin1
line2
    line3
EOF

#删除缩进
cat > ./test <<-EOF
lin1
line2
    line3
EOF

#不转义变量
cat > ./test <<"EOF"
lin1 $name
line2
    line3
EOF

echo -e "name\nage" > ./test

if语句

if [ expression ]; then

  ## 如果条件为真则执行此块,否则转到下一个

elif [ expression ]; then

  ## 如果条件为真则执行此块,否则转到下一个

else 

  ## 如果以上条件都不成立,则执行此块

fi

测试条件

以下是可用于数字比较的测试条件运算符:
$a -lt $b   $a < $b($a 小于 $b)
$a -gt $b   $a > $b($a 大于 $b)
$a -le $b   $a <= $b($a 小于等于 $b )
$a -ge $b   $a >= $b ($a 大于等于 $b)
$a -eq $b   $a == $b
$a -ne $b   $a != $b

如果你要比较字符串,可以使用以下测试条件:
"$a" = "$b" $a 与 $b 相同
"$a" == "$b"    $a 与 $b 相同
"$a" != "$b"    $a 与 $b 不同
-z "$a" $a 为空字符串

文件类型检查也有条件:
-f $a   $a 是一个文件
-d $a   $a 是一个目录
-L $a   $a 是一个链接

for语句

for arg in LIST; do
    commands
done

while语句

while [ condition ]; do
    commands
done

case语句

case $variable in
    pattern1)
        # 如果$variable匹配pattern1,则执行这里的命令
        ;;
    pattern2)
        # 如果$variable匹配pattern2,则执行这里的命令
        ;;
    *)
        # 如果$variable没有匹配任何模式,则执行这里的命令
        ;;
esac

read指令

IFS="," read -d ' ' -ra ARG  <<< ${ARGS}

用法

用法 
read [选项] [变量名] 

-a  指定变量为数组
-r  反斜杠转义不会生效,意味着行末的’\’成为有效的字符,例如使 \n 成为有效字符而不是换行
-p  指定输出提示信息
-d  输入结束符,当输入的内容出现这个字符时,立即结束。一般情况下是以IFS为参数的间隔,但是通过-d自定义
-n  指定输入的字符长度
-t  指定读取值时等待的时间(秒),read命令会一直等待用户输入,时间到自动退出
-s  不显示输入的值,一般用于密码