shell03

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

while 条件测试   //根据条件的结果决定是否要执行任务,条件测试成

功的话就执行,如果失败立刻结束循环

while=循环

sleep=让它多少时间去执行一次

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分支,功能类似if,编写时语句比if精简

case 调用的变量名 in

模式1)

指令;;

模式2)

指令;;

*)

指令

esac

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

#!/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

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

nginx 是搭建网站的服务

编写源码安装nginx脚本:

tar -xf lnmp_soft.tar.gz    //在家目录释放软件包,这个软件包是从真机获取的

cp lnmp_soft/nginx-1.17.6.tar.gz  /opt   //拷贝nginx到opt下

cd  /opt     //回opt写下列脚本

#!/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.2.5/ 这个地址要按照自己虚拟机的写

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

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

-n以数字格式显示端口号

-t显示TCP连接的端口

-u显示UDP连接的端口

-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口

-p显示监听端口的服务名称是什么(也就是程序名称)

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

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

#!/bin/bash
case $1 in
kai)
/usr/local/nginx/sbin/nginx;;
guan)
/usr/local/nginx/sbin/nginx -s stop;;
cq)
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx;;
cx)
netstat -ntulp | grep -q nginx
[ $? -eq 0 ] && echo "nginx正在运行" || echo "没有运行";;
*)
echo "使用";;
esac

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

四,函数,可以利用一个名称存储公共的语句块,实现

精简脚本方便后期调用的目的

函数名(){

指令

}

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

a(){     //创建函数

echo abc

echo xyz

}

a   //调用函数

a   //可以反复调用函数

使用函数修改字符颜色

#!/bin/bash

a(){   //创建函数,名字叫a

echo -e "\033[$1m$2\033[0m"    //输出带颜色的字符

}

a 31 ABCD    //调用函数时,后面跟第一个位置变量定义颜色

第二个位置变量定义内容

a 32 xyzZ

a 33 EGSD

a 34 ERTY

a 35 BJYQ

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

#!/bin/bash
a(){
echo -e "\033[$1m$2\033[0m"
}
case $1 in
kai)
/usr/local/nginx/sbin/nginx;;
guan)
/usr/local/nginx/sbin/nginx -s stop;;
cq)
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx;;
cx)
netstat -ntulp | grep -q nginx
[ $? -eq 0 ] && a 32 "nginx正在运行" || a 31  "没有运行";;
*)
a 5 "使用";;
esac

五,字符串的处理

  1. 字符串的截取

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

[root@proxy opt]# a=abcd

[root@proxy opt]# echo ${a:1:2}     //从第二位截取两位

bc

[root@proxy opt]# echo ${a:0:2}    //从头截取两位

ab

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

注意该脚本用到以下思路:

[root@proxy opt]# c=a$c    //首先准备一个变量c作为口袋可以装字符

这里装了一个字符a

[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中

a=${x:n:1}   //截取到1个随机字符,存在变量a中

c=$a$c   //不断往c中追加,此时c相当于一个袋子

done

echo $c   //最后喊出,得到8位长度随机字符串

  1. 字符串替换

${变量名/旧/}

a=1234

echo ${a/2/6}    //将1个字符2换成6

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替换成空,相当于删除

  1. 字符串的删除,可以删除两边

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

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

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

二,正则表达式,可以使用若干符号配合某工具对字符串进行

增删改查操作

head -5 /etc/passwd > user    //准备素材

grep ^root user    //找以root开头的行

grep bash$ user     //找以bash结尾的行

grep ^$ user   //找空行

grep -v ^$ user  //显示除了空行的内容

grep "[root]" user    //找r、o、t任意一个字符 

grep "[rot]" user    //效果同上

grep "[^rot]" user   //显示r或o或t以外的内容

grep "[0123456789]" user   //找所有数字

grep "[0-9]" user    //效果同上

grep "[^0-9]" user   //显示数字以外内容

grep "[a-z]" user    //找所有小写字母

grep "[A-Z]" user    //找所有大写字母

grep "[a-Z]" user    //找所有字母

grep "[^0-9a-Z]" user   //找所有符号

 

grep "." user   //找任意单个字符,文档中每个字符都可

以理解为任意字符

grep "r..t" user  //找rt之间有2个任意字符的行

grep "r.t" user  //找rt之间有1个任意字符的行,没有匹

配内容,就无输出

grep "*" user   //错误用法,*号是匹配前一个字符任意

次,不能单独使用

grep "ro*t" user   //找rt,中间的o有没有都行,有几次都行

grep ".*" user  //找任意,包括空行 .与*的组合在正则中相当

于通配符的效果

grep "ro\{1,2\}t" user  //找rt,中间的o可以有1~2个

grep "ro\{2,6\}t" user  //找rt,中间的o可以有2~6个

grep "ro\{1,\}t" user  //找rt,中间的o可以有1个以及1个以上

grep "ro\{3\}t" user   //找rt,中间的o必须只有有3个

sed 增删改查 . 流式编辑器

非交互式对文档增删改查

前置指令 | sed  选项  条件  指令

选项  -n  屏蔽默认输出   -r 支持扩展正则  -i  修改源文件

指令  p  输出   d  删除   s 替换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值