这篇博客记录了自己平时遇到的一些Bash脚本中相关的实现方法, 做一个摘录和总结.
写它的目的绝对不是鼓励各位使用shell脚本(相当不鼓励), 只是为了表明shell脚本可以做许多操作.
bash二维数组
Bash本身是不支持二维数组的, 这个方法只是一个替代.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| test_version_arrays=( 'pkg_ver=(python2 redis==2.10.5 rq==0.6)' 'pkg_ver=(python2 redis==2.10.5 rq==0.9)' 'pkg_ver=(python2 redis==2.10.5 rq==0.13)' 'pkg_ver=(python2 redis==3.2.1 rq==0.13)'
'pkg_ver=(python3 redis==3.2.1 rq==0.13)' 'pkg_ver=(python3 redis==3.2.1 rq==1.0)' )
for elt in "${test_version_arrays[@]}" do eval $elt; for pkg in "${pkg_ver[@]:1}" do echo $pkg done done
|
for循环打印下标
Copy from: https://stackoverflow.com/a/6723516/5563477
1 2 3 4
| foo=('s1' 's2' 's3') for i in "${!foo[@]}"; do printf "%s\t%s\n" "$i" "${foo[$i]}" done
|
根据md5值对字符串去重
如果我们要将许多字符串去重并保存, 最先想到的方法应该是先将这些字符串去重, 再保存,
这里, 我们换一种思路, 先将文件保存, 再对这些文件去重.
1 2 3 4 5 6 7 8 9 10 11 12 13
| arr=('str1' 'str1' 'str1' 'str1' 'str2' 'str3')
mkdir -pv tmp
for i in "${!arr[@]}"; do echo "${arr[$i]}" > tmp/$i.txt done
md5sum tmp/* | \ sort | \ awk 'BEGIN{lasthash = ""} $1 == lasthash {print $2} {lasthash = $1}' |\ xargs rm -v
|
使用sed以及sort针对数组中的某一部分进行排序
1 2 3 4 5 6
| arr=('version-1' 'version-2' 'version-3' 'version-39' 'version-13')
data=($(for a in "${arr[@]}"; do echo "$a" | sed 's/.*version-\([0-9]*\)/\1@&/'; done | sort -t @ -k 1 -nr))
echo ${data[@]}
|