Skip to content

Instantly share code, notes, and snippets.

@lugeek
Last active May 8, 2021 08:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lugeek/a55d9f53cd9331afe6c94b2b8e2b792c to your computer and use it in GitHub Desktop.
Save lugeek/a55d9f53cd9331afe6c94b2b8e2b792c to your computer and use it in GitHub Desktop.
shell
# ---------------------------------------
echo "shell定义字典"
#必须先声明
declare -A dic
dic=([key1]="value1" [key2]="value2" [key3]="value3")
#打印指定key的value
echo ${dic["key1"]}
#打印所有key值
echo ${!dic[*]}
#打印所有value
echo ${dic[*]}
#字典添加一个新元素
dic+=([key4]="value4")
#遍历key值
for key in $(echo ${!dic[*]})
do
echo "$key : ${dic[$key]}"
done
# ---------------------------------------
echo "shell定义数组"
#数组
list=("value1" "value2" "value3")
#打印指定下标
echo ${list[1]}
#打印所有下标
echo ${!list[*]}
#打印数组下标
echo ${list[*]}
#数组增加一个元素
list=("${list[@]}" "value3")
#按序号遍历
for i in "${!arr[@]}"; do
printf "%s\t%s\n" "$i" "${arr[$i]}"
done
#按数据遍历
for NUM in ${ARR[*]}
do
echo $NUM
done
#数组contains
function contains() {
ret=0
if [[ ${gray_list[@]} =~ (^|[[:space:]])$1($|[[:space:]]) ]]; then
ret=1
else
ret=0
fi
echo $ret
}
if [ $(contains $name) -eq "1" ]; then
echo "contains"
fi
# ---------------------------------------
sed -i '' "/hi/s/22//" text.txt # 删除hi那行的22字符
sed -i '' "/ok6/s/6/999/" text.txt # ok6哪一行的6替换成999
sed -i '' '/ok/s/^/ok2\'$'\n/g' text.txt # ok的开头插入ok2并换行
sed -i '' '/ok2ok3/s/$/ok4/g' text.txt #ok2ok3后面插入ok4,不换行
sed -i '' '/ok2ok3ok4/s/$/\'$'\nok5/g' text.txt #ok2ok3ok4后插入换行,再插入ok5
# 末尾的g可以去掉,g应该是全局匹配的意思吧
# ---------------------------------------
file=/dir1/dir2/dir3/my.file.txt
可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 / 及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 . 及其左边的字符串:file.txt
${file##*.}:删掉最后一个 . 及其左边的字符串:txt
${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 / 及其右边的字符串:(空值)
${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
# ---------------------------------------
# >  :代表重定向到哪里,例如:echo "123" > /home/123.txt
# 1  :表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
# 2  :表示stderr标准错误
# &  :表示等同于的意思,2>&1,表示2的输出重定向等同于1
if command -v brew 2>&1 >/dev/null; then
# 执行命令行brew,标准输出重定向到黑洞,标准错误输出和标准输出一样,也就是不输出任何东西
echo 'ok'
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment