Last active
May 8, 2021 08:31
-
-
Save lugeek/a55d9f53cd9331afe6c94b2b8e2b792c to your computer and use it in GitHub Desktop.
shell
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# --------------------------------------- | |
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