$? 表示上一个命令退出的状态,0表示执行正常,不等于0表示执行不正常。 $$ 表示当前进程编号 $0 表示当前脚本名称 $# 表示参数的个数,常用于循环 $*和$@ 都表示参数列表 $n 表示n位置的输入参数(n代表数字,n>=1) 传递参数这个和c语言等是一样的。类似与下面这样。 ./test.sh 1 2 3 接受参数像下面这样处理 #分别表示第一个参数,第二个参数,第三个参数 inputfile1=$1 inputfile2=$2 inputfile3=$3
read:
#!/bin/bash read -p "请输入你的名字:" name echo $name
for循环
#下面这两种形式 #!/bin/bash for N in 1 2 3 do echo $N done for((i=1;i<=5;i++)) do echo "weclome $i" done
while循环
#!/bin/bash i=1 while((i<=5)) do echo "welcome $i" let i++ done
case匹配
#!/bin/bash case $1 in start) echo "starting" ;; stop) echo "stoping" ;; *) echo "没有匹配的" esac
if判断
#!/bin/bash
read -p "请输入用户名" NAME
printf ‘%s\n‘ $NAME
if [ $NAME = root ]
then
echo "欢迎你 ${NAME}"
elif [ $NAME = magic ]
then
echo "欢迎你,${NAME}"
else
echo "你是谁,滚犊子"
fi
比较
# 字符串比较 -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于 -e 判断对象是否存在 -d 判断对象是否存在,并且为目录 -f 判断对象是否存在,并且为常规文件 -L 判断对象是否存在,并且为符号链接 -h 判断对象是否存在,并且为软链接 -s 判断对象是否存在,并且长度不为0 -r 判断对象是否存在,并且可读 -w 判断对象是否存在,并且可写 -x 判断对象是否存在,并且可执行 -O 判断对象是否存在,并且属于当前用户 -G 判断对象是否存在,并且属于当前用户组 -nt 判断file1是否比file2新 [ "/data/file1" -nt "/data/file2" ] -ot 判断file1是否比file2旧 [ "/data/file1" -ot "/data/file2" ]
字符串
#获取字符串长度
string="abcd"echo ${#string} #输出 4
#提取子字符串
#以下实例从字符串第 2 个字符开始截取 4 个字符:
string="turtle is a great site"echo ${string:1:4} # 输出 le
#查找子字符串
#查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
string="runoob is a great site"
echo `expr index "$string" io`
# 输出 4
数组
(1)定义数组
#在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。
array_name=(value0 value1 value2 value3)
(2)读取数组
读取数组元素值的一般格式是:
${数组名[下标]}
例如
valuen=${array_name[n]}
#使用 @ 符号可以获取数组中的所有元素:
echo ${array_name[@]}
(3)获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
函数
#!/bin/bash
function print_msg {
echo "Hello, World"
}
print_msg
#或
print_msg() {
echo "Hello, World"
}
print_msg
案例一
进度条:
#!/bin/sh
b=‘‘
for ((i=0;$i<=100;i+=2))
do
printf "progress:[%-50s]%d%%\r" $b $i
sleep 0.1
b=#$b
done
echo
[root@ngsocdev13 ~]# sh print200.sh
progress:[##################################################]100%
案例二
WORK_PATH=$(cd `dirname $0`/.. ; pwd)
NOAH_HOST=$(python -c "import sys;sys.path.append(‘$WORK_PATH‘);from get_noah_host import ConnectionPG;pg = ConnectionPG();print pg.get_noah_ip()")
ES_HOST=$(python -c "import sys;sys.path.append(‘$WORK_PATH‘);from get_es_host import Hosts;host = Hosts();print host.get_es_host()")
BM_LIST=$(python -c "import sys;sys.path.append(‘$WORK_PATH‘);from get_es_host import Hosts;host = Hosts();print host.get_bm_host_num()")
action_zero_relica(){
template_list=$(curl -sXGET "http://$ES_HOST:9200/_cat/templates"|awk ‘{print $1}‘)
# 更新模板
for index in $template_list
do
index_template=$(curl -sXGET "http://$ES_HOST:9200/_template/$index")
json_head="{\""$index"\":"
zero_shard_template=$(echo $index_template | sed "s/$json_head//g" | sed ‘s/"number_of_replicas":"1"/"number_of_replicas":"0"/g‘ | sed ‘s/"aliases":{}}/"aliases":{}/g‘)
# echo $zero_shard_template
$(curl -sPUT "http://$ES_HOST:9200/_template/$index" -d $zero_shard_template > /dev/null 2>&1 &)
done
# 替换noah配置文件
$(ansible -i $NOAH_HOST, all -b -m replace -a ‘path=/usr/local/noah/basp-web-service/conf/service_config.yaml regexp="number_of_replicas: 1" replace="number_of_replicas: 0"‘ >/dev/null 2>&1)
# 重启诺亚server生效
$(ansible -i $NOAH_HOST, all -b -m shell -a "systemctl restart noah-web-service" > /dev/null 2>&1 &)
# 添加索引健康检查为定时任务 1小时执行1次
$(sed -i "/check_index_health.py/d" /etc/crontab)
$(echo \*/60 \* \* \* \* root /usr/bin/python $WORK_PATH/check_index_health.py >> /etc/crontab)
}
# 节点大于
if [ $BM_LIST -le 5 ]
then
action_zero_relica
else
exit 0
fi
原文:https://www.cnblogs.com/shwang/p/11821396.html