这里记录了一些个人学习 Bash Shell 时遇到的一些问题, 可以作为避免踩坑和速查手册. 如有疑问欢迎留言.
字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号里任何字符都会原样输出,变量也是无效的,也无法对单引号进行转义。
双引号就可以随意的进行转义啦!
1 2 3 4 5
| name="mutoe" greeting="hello, $name !" greeting="hello, "$name" !" greeting="hello, ${name}!" quote_greeting="hello, \"$name\" !"
|
1 2
| str='abcd' echo ${#abcd}
|
1 2
| str='abcdefg' echo ${string:1:4}
|
1 2 3 4 5 6
| str="a,b,c,d" arr=$(echo $str | tr ";" "\n") for item in $arr do echo $item done
|
数组使用小括号定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| array=(1 2 a b "foo") array[10]=bar
echo ${array[3]} echo ${array[9]} echo ${array[10]} echo ${array[*]} echo ${array[@]}
echo ${#array[*]}
echo ${#array[10]}
unset array[1] echo ${array[*]} echo ${#array[*]}
new_arr=(0 ${array[*]} z) echo ${new_arr[*]} echo ${new_arr[6]}
unset new_arr echo $new_arr
|
Bash shell 中可以使用字符串作为数组的下标,类似 Map 对象
1 2 3 4 5 6
| declare -A color color["red"]="#ff0000" color["green"]="#00ff00" color["blue"]="#0000ff"
echo $color
|
1 2 3 4 5 6 7 8 9
| if condition then ... elif condition2 then ... else ... fi
|
实际上,if 检测的是一条命令的退出状态。
Example
1 2 3 4 5
| a=$[2*3] b=$[1+5] if [ $a == $b ]; then echo "a == b" fi
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| case $var in 1) command1 command2 ;; $const|2) command1 command2 ;; *) command1 command2 ;; esac
|
以 #
开始的部分就是注释, sh里没有多行注释,只能每行加一个 #
号