case语句 、 函数及中断控制 、 字符串处理、字体颜色

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

定义一个高效的ping函数

 

    
    #!/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   恢复黑白色

评论