Shell-笔记

这里记录一些我觉得值得记录的一些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

+号就是跟踪模式输出的行

默认值赋值

1
a=${b:=/b/a}

:=是一个赋值操作符,它表示的含义是: 如果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

Shell-笔记
http://example.com/2024/01/04/shell-notebook/
作者
Peter Pan
发布于
2024年1月4日
许可协议