这里记录一些我觉得值得记录的一些shell script的奇技淫巧
数组
list
1 2 3 4 5 6 7
| my_array=("a" "b" "c" "d") # 循环所有元素 for i in "${my_array[@]}";do echo ${i} done # 获取数组元素个数 array_length="${#my_array[@]}"
|
关联数组
k-v
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 定义关联数组 declare -A my_dict
# 添加键值对 my_dict["key1"]="value1" my_dict["key2"]="value2" my_dict["key3"]="value3"
# 获取特定键的值 echo "Value for key2: ${my_dict["key2"]}"
# 遍历所有键值对 for key in "${!my_dict[@]}"; do echo "Key: $key, Value: ${my_dict[$key]}" done
|
间接引用
假如我有一个变量,它的变量名是由另一个变量定义的,这时候就可以用到间接引用.
1 2 3 4 5 6 7 8 9
| base_name="my_array" my_array_1=("element1" "element2" "element3") var_name="${base_name}_1[@]" # 间接引用数组 for i in "${!var_name}";do echo ${i} done # 间接引用变量 echo "${!var_name}"
|
跟踪模式
用于debug,开启跟踪模式后,shell会在执行每个命令之前将该命令及其参数输出到stderr.可以通过此模式看到脚本执行每个步骤,有助于定位问题.
1 2 3 4 5 6
| # 执行脚本时开启 bash -x my_script.sh # 在脚本中配置开启 set -x # 关闭 set +x
|
输出类似如下:
1 2 3 4 5
| + echo 'Hello, World!' Hello, World! + variable='some value' + echo 'The variable is: some value' The variable is: some value
|
+
号就是跟踪模式输出的行
默认值赋值
:=
是一个赋值操作符,它表示的含义是: 如果b
变量没有默认值就把/b/a
赋值给它
1 2 3 4 5 6 7 8 9 10 11
| #!/bin/bash b= a=${b:=/b/a} echo $a # 这里b没有定义,所以输出的是/b/a
#!/bin/bash b=/path/to/something a=${b:=/b/a} echo $a #这里b定义了,所以输出的是/path/to/something
|