echo${sounds[dog]}# Dog's sound echo${sounds[@]}# All values echo${!sounds[@]}# All keys echo${#sounds[@]}# Number of elements unset sounds[dog] # Delete dog
迭代
1 2 3
for val in"${sounds[@]}"; do echo$val done
1 2 3
for key in"${!sounds[@]}"; do echo$key done
Bash 条件句
整数条件
条件
描述
[[ NUM -eq NUM ]]
等于 Equal
[[ NUM -ne NUM ]]
不等于 Not equal
[[ NUM -lt NUM ]]
小于 Less than
[[ NUM -le NUM ]]
小于等于 Less than or equal
[[ NUM -gt NUM ]]
大于 Greater than
[[ NUM -ge NUM ]]
大于等于 Greater than or equal
(( NUM < NUM ))
小于
(( NUM <= NUM ))
小于或等于
(( NUM > NUM ))
比…更大
(( NUM >= NUM ))
大于等于
字符串条件
条件
描述
[[ -z STR ]]
空字符串
[[ -n STR ]]
非空字符串
[[ STR == STR ]]
相等
[[ STR = STR ]]
相等(同上)
[[ STR < STR ]]
小于 (ASCII)
[[ STR > STR ]]
大于 (ASCII)
[[ STR != STR ]]
不相等
[[ STR =~ STR ]]
正则表达式
例子
字符串
1 2 3 4 5 6 7
if [[ -z "$string" ]]; then echo"String is empty" elif [[ -n "$string" ]]; then echo"String is not empty" else echo"This never happens" fi
组合
1 2 3
if [[ X && Y ]]; then ... fi
相等
1 2 3
if [[ "$A" == "$B" ]]; then ... fi
正则表达式
1 2 3
if [[ '1. abc' =~ ([a-z]+) ]]; then echo${BASH_REMATCH[1]} fi
小于
1 2 3
if (( $a < $b )); then echo"$a is smaller than $b" fi
存在
1 2 3
if [[ -e "file.txt" ]]; then echo"file exists" fi
文件条件
条件
描述
[[ -e FILE ]]
存在
[[ -d FILE ]]
目录
[[ -f FILE ]]
文件
[[ -h FILE ]]
符号链接
[[ -s FILE ]]
大小 > 0 字节
[[ -r FILE ]]
可读
[[ -w FILE ]]
可写
[[ -x FILE ]]
可执行文件
[[ f1 -nt f2 ]]
f1 比 f2 新
[[ f1 -ot f2 ]]
f2 比 f1 新
[[ f1 -ef f2 ]]
相同的文件
更多条件
条件
描述
[[ -o noclobber ]]
如果启用 OPTION
[[ ! EXPR ]]
不是 Not
[[ X && Y ]]
和 And
[[ X || Y ]]
或者 Or
逻辑和,或
1 2 3 4 5 6
if [ "$1" = 'y' -a $2 -gt 0 ]; then echo"yes" fi if [ "$1" = 'n' -o $2 -lt 0 ]; then echo"no" fi
Bash 循环
基本 for 循环
1 2 3
for i in /etc/rc.*; do echo$i done
类似 C 的 for 循环
1 2 3
for ((i = 0 ; i < 100 ; i++)); do echo$i done
范围
1 2 3
for i in {1..5}; do echo"Welcome $i" done
步长
1 2 3
for i in {5..50..5}; do echo"Welcome $i" done
自动递增
1 2 3 4 5
i=1 while [[ $i -lt 4 ]]; do echo"Number: $i" ((i++)) done
自动递减
1 2 3 4 5
i=3 while [[ $i -gt 0 ]]; do echo"Number: $i" ((i--)) done
Continue
{data
1 2 3 4 5 6
for number in $(seq 1 3); do if [[ $number == 2 ]]; then continue; fi echo"$number" done
Break
1 2 3 4 5 6 7 8
for number in $(seq 1 3); do if [[ $number == 2 ]]; then # 跳过整个循环的其余部分。 break; fi # 这只会打印 1 echo"$number" done
Until
1 2 3 4 5
count=0 until [ $count -gt 10 ]; do echo"$count" ((count++)) done
死循环
1 2 3
whiletrue; do # 下面是一些代码 done
死循环(简写)
1 2 3
while :; do # 下面是一些代码 done
读取文件的每一行
1 2 3
cat file.txt | whileread line; do echo$line done
Bash 函数
定义函数
1 2 3
myfunc() { echo"hello $1" }
同上(替代语法)
1 2 3
functionmyfunc() { echo"hello $1" }
1
myfunc "John"
返回值
1 2 3 4
myfunc() { local myresult='some value' echo$myresult }
1
result="$(myfunc)"
抛出错误
1 2 3
myfunc() { return 1 }
1 2 3 4 5
if myfunc; then echo"success" else echo"failure" fi