$? 表示上一个命令退出的状态,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