Shell 代码片段
read 读取用户输入
bash
read -p "是否重启 celery 服务?[yes/no]:" celery_yes
if [[ "$celery_yes" == "yes" ]]; then
ssh popop supervisorctl restart celery
ssh popop supervisorctl restart celerybeat
fi
字符串分割得到数组
bash
#!/bin/bash
str="a,b,c"
lst=(${str//,/ })
echo ${lst[@]} # a b c
echo ${lst[0]} ${lst[1]} # a b
- 核心是括号里头的
//,/
,注意后面有一个空格
删除匹配的前缀
bash
#!/bin/bash
str="what is your name?"
echo ${str#* } # is your name?
echo ${str##* } # name?
#
最短匹配##
最长匹配- 在
man bash
文档中搜索##
可查询到此方法的介绍
随机数
bash
#!/bin/bash
# 1~10 之间的随机数
num=$((RANDOM % 10 + 1))
echo $num
- 核心是
RANDOM
指定循环次数
seq
bash
#!/bin/bash
for i in $(seq 10); do
echo $i
done
- 核心:
seq
命令打印出一串有序的数字
使用{..}
bash
#!/bin/bash
for i in {1..10}
do
echo $i
done
for(;;)
bash
#!/bin/bash
for ((i=1; i<=10; i++))
do
echo $i
done
格式化日期时间
bash
#!/bin/bash
echo "`date +%Y%m%d_%H%M%S`" # 20240229_174515
echo "`date +%H%M`" # 1745
=~
多值判断
bash
if [[ "$ACTION" =~ [start|stop|restart] ]]; then
echo $ACTION
fi
自增
bash
((i++))
- 需要双括号
算术运算
bash
#!/bin/bash
a=5
b=2
echo $(($a+$b)) # 7
echo $(($a-$b)) # 3
echo $(($a*$b)) # 10
echo $(($a/$b)) # 2
echo $(($a%$b)) # 1
数组的定义与遍历
bash
#!/bin/bash
arr=(a b c)
for item in ${arr[@]}
do
echo $item
done
# 获取第一个元素
echo ${arr[0]} # a
# 获取数组长度
echo ${#arr[@]} # 3
- Bash Shell 只支持一维数组,不支持多维数组
case 用法
bash
case "$ACTION" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
usage
;;
esac
函数的定义与调用
bash
#!/bin/bash
test_func() {
echo $1
echo $2
}
test_func a 100