0503、while循环、循环的控制、case分支、函数、字符串的处理

目录

一、while循环,可以根据条件决定循环次数,也可以实现无限循环

二、循环的控制

三、case分支

示例1:

示例2:nginx

**nginx 是搭建网站的服务**

安装nginx

(1)源码包准备

(3)netstat 命令可以查询系统启动的端口信息

(4)使用case分支编写控制nginx服务的脚本:

四、函数

五、字符串的处理   

${a:}   ${a/}   ${a#}   ${a%}   ${a:-}  

1、字符串的截取

2、字符串替换

3、字符串的删除,可以删除两边

4、定义变量初值(备用)



while循环,可以根据条件决定循环次数,也可以实现无限循环

格式:
while 条件测试
                                    //根据条件的结果决定是否要执行任务,
do                                                           条件测试成功的话就执行,如果失败立刻结束循环
任务
done

-------------------------------------------------------------------
#!/bin/bash
while  :          //冒号代表永远正确,死循环
do
echo abc
sleep 0.1      //休息0.1秒
done
-------------------------------------------------------------------
#!/bin/bash
n=10
while  [ $n -ge 5 ]    //可以根据条件决定是否要循环
do
echo abc
sleep 0.1
let n--        //每次循环将n-1
Done
-----------------------------------------------------------

二、循环的控制

exit            可以终止循环,但脚本也终止

break        可以终止循环,继续循环后的任务(跳出循环)

continue  可以终止当前循环,继续下一次循环

示例:编写脚本,帮用户进行整数求和,如果用户输入0就结束求和,并输出结果

#!/bin/bash
x=0
while     :                             #while循环后面写:代表永远正确可以无限循环
do
read   -p   "请输入一个整数求和(0是结束并输出结果):"  n
[  -z   $n   ]    &&    continue
                                          #如果n是空值重新进行循环任务
$n   -eq   0   ]   &&  break                                    #如果n是0则退出循环执行循环后任务
let   x+=n                                                                #不断的将n的值保存在x里   
done
echo   "
总和是$x"
~                                                                    

三、case分支

case分支,功能类似if,编写时语句比 if 精简
0503、while循环、循环的控制、case分支、函数、字符串的处理_第1张图片

格式:
case   调用的变量名     in
模式1)
指令;;
模式2)
指令;;
*)
指令
esac

------------------------------------------------------------

示例1:

#!/bin/bash
case  $1  in
t)                      
  //如果$1是t就执行touch任务
    touch $2;;
m)                  
   //如果$1是m就执行mkdir任务
    mkdir $2;;
r)                     
   / /如果$1是r就执行rm任务
    rm -rf $2;;
*)
    echo "请输入t或者m或者r"
esac
------------------------------------------------------------

示例2:nginx

**nginx 是搭建网站的服务**

安装nginx

一键安装nginx

  • 一键源码安装nginx软件
  • 脚本自动安装相关软件的依赖包
  • 脚本自动判断yum是否可用

(1)源码包准备

tar -xf lnmp_soft.tar.gz        //在家目录释放软件包,这个软件包是从真机获取的
cp lnmp_soft/nginx-1.17.6.tar.gz  /opt     //拷贝nginx到opt下
cd  /opt        //回opt写下列脚本

(2)编写源码安装nginx脚本:

#!/bin/bash
yum   -y   install   gcc   make   pcre-devel    openssl-devel  
 //安装依赖软件
tar   -xf   nginx-1.17.6.tar.gz             //释放nginx的tar包
cd   nginx-1.17.6                          //进入目录
./configure                              //配置
make                              //编译
make   install                      //安装
~             
脚本写完后,检查yum必须可用!
运行完脚本后,
查看 ls  /usr/local/nginx 目录可以看到4个目录则成功 conf  html  logs  sbin

systemctl  stop  httpd            //关闭httpd避免端口冲突
/usr/local/nginx/sbin/nginx      //绝对路径方式开启nginx服务
systemctl  stop  firewalld        //关闭防火墙
使用浏览器访问虚拟机的网站页面http://192.168.4.7/ 这个地址要按照自己虚拟机的写

/usr/local/nginx/sbin/nginx      -s      stop   //关闭nginx

--------------------------------------------------------

(3)netstat 命令可以查询系统启动的端口信息

-n    以数字格式显示端口号
-t     显示TCP连接的端口
-u    显示UDP连接的端口
-l     显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p    显示监听端口的服务名称是什么(也就是程序名称)

[root@svr7 ~]# netstat -ntulp  | grep httpd       #查询http状态

[root@svr7 ~]# netstat -ntulp  | grep :80        #查看谁在用80端口

---------------------------------------------------------------

(4)使用case分支编写控制nginx服务的脚本:

#!/bin/bash
case   $1    in

start  |  kai )     //输入start或者kai 就开启nginx
/usr/local/nginx/sbin/nginx;;

stop  |  guan )   //输入stop或STOP或s或guan就关闭nginx
/usr/local/nginx/sbin/nginx -s stop;;

re  |  restart )      //输入re或者cq就重启nginx
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx;;

cx  |  status )     //输入cx或者status就查询nginx状态
netstat -ntulp | grep -q nginx      //查询nginx,但不输出结果 -q选项是保持沉默

[  $?  -eq  0  ]   &&   echo "nginx正在运行"   ||   echo "nginx未开启";;    //判断,如果上述任务成功,说明nginx服务开启,就显示"nginx正在运行",如果上述任务失败,说名nginx服务关闭,就显示"nginx未开启"

*)
echo "请输入start或stop"
esac

-------------------------------------------------------------

echo  -e  "\033[34mABCD\033[0m"    //使用echo输出不同颜色的内容

\033[34m  改颜色
\033[0m    恢复默认黑白色

四、函数

什么是函数?
可以利用一个名称存储公共的语句块,实现精简脚本方便后期调用的目的

格式:
函数名(){
    指令
}

------------------------------------------------------

示例:使用函数修改字符颜色

#!/bin/bash
a(){                               #
创建函数,名字叫a
echo -e " \033[$1m$2\033[0m"             #输出带颜色的字符
}

a  31 ABCD        #调用函数时,后面跟第一个位置变量定义颜色, 第二个位置变量定义内容
a  30 ABCD
a  32 ABCD
a  33 ABCD
a  35 ABCD

------------------------------------------------------

利用函数完善之前的脚本,使输出信息时有不同颜色

#!/bin/bash

a(){                           
echo -e " \033[$1m$2\033[0m"           
}

case   $1    in
start  |  kai ) 
 
/usr/local/nginx/sbin/nginx;;

stop  |  guan ) 
/usr/local/nginx/sbin/nginx -s stop;;

re  |  restart )     
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx;;

cx  |  status )  
netstat -ntulp | grep -q nginx     

[  $?  -eq  0  ]   &&   a 32  "nginx正在运行"   ||   a 31 "nginx未开启";;   

*)
a  5  "请输入start或stop"
esac

五、字符串的处理   

${a:}   ${a/}   ${a#}   ${a%}   ${a:-}  

1、字符串的截取

${变量名称:截取位置:截取长度}

[root@svr7 opt]# a=1234567890
[root@svr7 opt]# echo $a
1234567890
[root@svr7 opt]# echo ${a:5:4}
6789
[root@svr7 opt]# echo ${a:0:5}
12345

案例:编写脚本,可以生成8位随机字符用作密码

注意该脚本用到以下思路:
[root@proxy opt]# c=a$c    //
首先准备一个变量c作为口袋可以装字符
这里装了一个字符a
ec
[root@proxy opt]# echo $c    //
看看口袋里
a
[root@proxy opt]# c=6$c     //
再往口袋里装一个字符6
[root@proxy opt]# echo $c   //
再看看,口袋里字符越来越多
6a
[root@proxy opt]# c=t$c    //
再装个字符t
[root@proxy opt]# echo $c   //
字符又增加了
t6a

之后开始写脚本:

#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
for i in {1..8}
do
n=$[RANDOM%62]        //得到0~61随机数存在变量n中            RANDOM--随机产生数字
a=${x:n:1}        //截取到1个随机字符,存在变量a中
c=$a$c              //不断往c中追加,此时c相当于一个袋子
done
echo $c             //最后喊出,得到8位长度随机字符串

2、字符串替换

${变量名/旧/}

a=112233  
echo ${a/2/6}    //将1个字符2换成6
echo ${a//2/6}   //将所有字符2换成6

a=1122233
echo ${a/22/66}    //换2个
echo ${a/11/}       //将11替换成空,相当于删除

3、字符串的删除,可以删除两边

${变量名#要删除的内容}       #掐头

${变量名%要删除的内容}     #去尾

a=abcdef             //创建变量,作为素材
echo   ${a#abc}       //掐头,删除到abc
echo   ${a%def}       //去尾,删除到def
echo   ${a#abcde}    //掐头,删除到abcde

a=abcdefghijk         //创建变量,作为素材
echo   ${a#abcdefghi}   //掐头,删除到i
echo   ${a#*i}               //效果同上,精简写法
echo   ${a%defghijk}      //去尾,删除到d
echo   ${a%d*}           //效果同上,精简写法

编写脚本,可以批量修改扩展名

可以先用touch abc{01..10}.txt 创建10个文件作为素材

#!/bin/bash
for   i   in   $(ls *.txt) //找到所有的txt文件交给for循环
do
n=${i%.*}  //用去尾的方法删除扩展名
mv    $i   $n.doc  //再将源文件扩展名修改为doc
done

4、定义变量初值(备用)

${变量名:-初值}             #在变量没有值(为空)的时候,初值才会生效

示例:
#!/bin/bash
read  -p  "请输入用户名:"  u

[ -z $u ] && echo "必须输入用户名!"  && exit

useradd $u

read -p "请输入密码(默认123456):"  n

echo  ${n:-123456}   |   passwd   --stdin  $u

                             

你可能感兴趣的:(05,shell编程,linux)