随便记录一些常用的bash编程知识点,比较杂乱,想到什么记录什么。
1.特殊字符
字符 | 说明 |
"(双引号) | 部分引用,不阻断字符串中的变量 |
’(单引用) | 全引用,会阻断字符串中所有的特殊字符 |
` | 命令替换符,用于执行命令,与$(ls -lrt)功能类似 |
( ) | 命令组,在子shell中执行 数组初始化,元素写在括号内,空格分隔 |
{ } | 命令组,在当前shell中执行,最后一条语句要接分号 |
[ ] | 条件测试,条件表达式放在括号内 通过数组下标取元素 |
[[ ]] | 模糊匹配 [[ $res =~ .*([[:digit:]]+)test ]] |
& | 后台运行命令 |
;; | case终止符 |
2.内置参数
字符 | 说明 |
$? | 上一条命令返回值,大部分命令执行成功会返回 0,失败返回 1 |
$$ | 当前脚本进程号 |
$# | 参数个数 |
$@ | 参数列表,可以当做数组使用 |
$0 | 文件名本身 |
3.条件判断
#case1
if [ $a = "case1" ]; then
echo "equals"
else
echo "not equals"
fi
#case2
[ $b -eq 3 ] && echo "b equals 3" && exit
[ $b -ne 3 ] || { echo "b equals 3" && exit; }
# and / or
[ $a -eq 3 -a $b = "hello" ] && echo "a==3 and b==hello"
# 模糊匹配
if [[ $a = master* ]] && echo "a starts with master"
(1) 整数比较运算: -eq, -gt, -lt, -ge, -le
(2) 字符串比较运算符: >, >=, <, <=, !=, -z, -n
(3) 逻辑运算: -a, -o , !
(4) 可以使用[[ ]] 做模糊匹配
4.循环与分支
#for循环
#bash脚本中,关键字(或者命令)如果作为表达式的开头,并且如果想再同一行再写一个新的表达式的话,那么必须使用分号结束上一个表达式。 do如果换行的话,for语句末尾的分号可以去掉。 if/then也一致
ips=(ip1 ip2 ip3)
for ip in ips do
echo "ip:$ip"
done
#while循环
while read line
do
echo "line:$line"
done < ips.txt
#case分支
case $color in
"red")
echo "the color is red";
;;
"white")
echo "the color is white";
;;
*)
echo "the color is $color";
;;
esac
5.字符串处理
str=abcABC123ABCabc
# 长度
echo "${str} len: ${#str}"
#提取子串
echo "get substring: ${str:3}"
echo "get substring: ${str:3:11}"
echo "get substring: `expr match ${str} '.*ABC[1−3]...*'`"
echo "get substring: `expr "${str}" : '.*
ABC[1−3]..
.*'`"
#子串替换
echo "replace substring: ${str/ABC/789}"
echo "replace substring: ${str//ABC/789}"
echo "replace substring: ${str/#abc/789}"
echo "replace substring: ${str/%abc/789}"
var=http://www.aaa.com/123.htm.
# #号截取,删除左边保留右边,输出 -> www.aaa.com/123.htm
echo ${var#*//}
# ##号截取,删除左边字符,保留右边字符。