case语句 、 函数及中断控制 、 字符串处理、字体颜色
case 分支 语句比if精简
case 变量 in 模式1) 命令系列 ;; *) 默认命令序列 esac
#!/bin/bash # 我是case测试 case $1 in 8) echo "等于8" echo "等于8" ;; 10) echo "等于10" ;; *) echo "默认提示" esac #!/bin/bash # 我是case测试 case $1 in t|T) touch $2 ;; m) mkdir $2 ;; r) rm -rf $2 ;; *) echo "t|m|r" ;; esac
bash case.sh 8 bash case.sh t 12.txt
安装nginx 脚本
#!/bin/bash tar -xf /opt/nginx-1.12.2.tar.gz -C /opt cd /opt/nginx-1.12.2 yum -y install gcc pcre-devel make openssl yum install -y zlib-devel &> /dev/null ./configure make && make install
/usr/local/nginx 【启动】 /usr/local/nginx/sbin/nginx 【查询】 netstat -ntulp | grep 80 【关闭防火墙】 systemctl stop firewalld 【停止】 /usr/local/nginx/sbin/nginx -s stop
写个控制nginx的脚本
grep -q zhu 效果等同于扔黑洞
#!/bin/bash # nginx 的控制脚本 case $1 in start) /usr/local/nginx/sbin/nginx ;; stop) /usr/local/nginx/sbin/nginx -s stop ;; restart) /usr/local/nginx/sbin/nginx -s stop /usr/local/nginx/sbin/nginx ;; reload) /usr/local/nginx/sbin/nginx -s reload ;; status) netstat -ntulp | grep nginx &> /dev/null if [ $? -eq 0 ];then echo -e "\033[36m nginx 运行中\033[0m" else echo -e "\033[31m nginx 运行中\033[0m" fi ;; *) echo "start | stop | restart | relaod | status" esac
函数及中断控制
函数
- 方式1 function 函数名 { 命令序列 } - 方式2 函数名() { 命令序列 }
定义一个颜色函数
#!/bin/bash # 有颜色的输出 cecho() { echo -e "\033[${1}m${2}\033[0m" } cecho $1 $2
#!/bin/bash # 我的ping cecho() { echo -e "\033[${1}m${2}\033[0m" } myping() { ping -c 3 -i 0.2 -W 1 $1 &> /dev/null [ $? -eq 0 ] && cecho 92 "${1} ping 通了" || cecho 91 "${1} ping 不通" } for i in {1..135} do myping 192.168.10.$i & done wait
wait 完成所有后台进程后才结束脚本
中断控制
- exit 终止脚本程序 - break 终止循环,继续循环之后的任务 - continue 终止当前循环,继续下次循环
#!/bin/bash # 整数求和 cecho() { echo -e "\033[${1}m${2}\033[0m" } m=0 str="" while : do read -p "请输入一个整数【输入0,将求和】:" n [ $n -eq 0 ] && break let m+=n [ -z $str ] && str="${n}" || str="${n}+${str}" done cecho 92 "${str}=${m}"
#!/bin/bash # 找出1~20以内的6的倍数 并输出他的平方值 a=6 e=20 for x in `seq $e` do if [ $[x%a] -eq 0 ];then let c=$x\*$x echo "${x}x${x}=${c}" fi done
字符串处理、字体颜色
截取字符串
${变量名:起始位:长度}
[root@system1 opt]# a=abcdefg [root@system1 opt]# echo ${a:1:2} bc [root@system1 opt]# echo ${a:0:4} abcd [root@system1 opt]# echo ${a::4} abcd # 0 可以省略 [root@system1 opt]# x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 # 62个字符
-
取8位随机数 作为密码
#!/bin/bash # 取随机数 x有62位 x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 for i in {1..8} do n=$[RANDOM%62] [ -z p ] && p=${x:n:1} || p="${p}${x:n:1}" done echo "${p}"
字符串替换 — 删除的效果
${变量名/old/new} 只会替换一个 ${变量名//old/new} 替换全部 ${变量名//old/} 删除全部
[root@system1 opt]# a=xDfRssd [root@system1 opt]# b=asda [root@system1 opt]# c=xD [root@system1 opt]# echo ${a/$c/$b}
字符串的删除
- ${变量名#关键词} 从左往右删除 - ${变量名#*关键词} 删到第一个关键词 - ${变量名##*关键词} 删到最后一个关键词 - ${变量名#关键词:关键词2} 删除到关键词2 等同于删到第一个关键词2
- ${变量名%关键词} 从右往左删除
[root@system1 opt]# a=`head -1 /etc/passwd` [root@system1 opt]# echo $a root:x:0:0:root:/root:/bin/bash [root@system1 opt]# echo ${a#root} :x:0:0:root:/root:/bin/bash [root@system1 opt]# echo ${a#*root} :x:0:0:root:/root:/bin/bash [root@system1 opt]# echo ${a##*root} :/bin/bash [root@system1 opt]# a=`head -1 /etc/passwd` [root@system1 opt]# echo $a root:x:0:0:root:/root:/bin/bash [root@system1 opt]# echo ${a%bin*} root:x:0:0:root:/root:/
修改文件扩展名
#!/bin/bash # 修改扩展名 for i in `ls /opt/*.txt` do [ $i != /opt/abc.txt ] && mv $i ${i%.txt}.doc done
初始值(初值 备用值)定义
[root@A opt]# a= [root@A opt]# echo ${a:-100} 100 [root@A opt]# a=102 [root@A opt]# echo ${a:-100} 102
新建用户设置默认密码
#!/bin/bash # 新增用户 read -p "请输入用户名:" u [ -z $u ] && echo "用户名不能为空" && exit read -s -p "请输入密码(默认123456):" p echo ${p:-123456} | passwd --stdin $u
颜色
echo -e "\033[31mABCD\033[0m" \033[31m 设置31号颜色 31红色 91高亮红 \033[0m 恢复黑白色
点赞
评论