第十五7.26(shell脚本)
创始人
2024-09-25 20:49:09
0

1.编写一个简单的脚本,并运行

[root@mj ~]# vim helloworld.sh #! /bin/bash echo "hello world" ​ [root@mj ~]# source helloworld.sh  hello world [root@mj ~]# chmod +x helloworld.sh  [root@mj ~]# ./helloworld.sh  hello world

2.nginx一键安装

[root@shell ~]# vim nginx.sh  #!/bin/bash yum -y install gcc gcc-c++ make pcre-devel openssl-devel wget cd /usr/local/src/ wget 'https://nginx.org/en/download.html' tar xf nginx-1.22.1.tar.gz cd nginx-1.22.1 ./configure --prefix=/usr/local/nginx make -j 4 make install [root@shell ~]#chmod +x nginx.sh  [root@shell ~]#  ./nginx.sh 

3.数字判断

-eq:equal,等于,一般用于 [ $? -eq 0 ],也就是判断上条命令返回值等于 0,直接数字 -eq 数字也可以equals

-ne:not equal,不等于,一般用于 [ $? -ne 0 ],判断上条命令返回值不等于0

-gt:greater than,大于

-ge:greater or equal,大于或等于

-lt:less than,小于

-le:less or equal,小于或等于

1.判断数字是否相等
[root@shell ~]# vim if.sh #!/bin/bash echo ":1" read a echo ":2" read  b ​ if [ $a -eq  $b ]; then            echo "两个数字相等" else            echo "两个数字不相等" fi [root@shell ~]# bash if.sh  :1 2 :2 2 两个数字相等 [root@shell ~]# bash if.sh  :1 1 :2 2 两个数字不相等

2.创建网络是否畅通
[root@shell ~]# vim ping.sh #!/bin/bash read -p "输入网址:" weburl ping -c 3 $weburl &> /dev/null ​ if  [ $? -eq 0 ]; then            echo "网络通畅"  else           echo "网络卡死" ​ fi [root@shell ~]# bash ping.sh  输入网址:www.baidu.com 网络通畅 ​

4.字符串格式

[ 字符串1 == 字符串2 ] 字符串内容相同

[ 字符串1 != 字符串2 ] 字符串内容不同

[ -z字符串 ] 字符串内容为空

[ -n字符串 ] 字符串内容不为空

[root@shell ~]# aaa="abc" [root@shell ~]# echo $aaa abc [root@shell ~]# test $aaa == "abc" [root@shell ~]# echo $? 0 [root@shell ~]# test $aaa == "aaaa" [root@shell ~]# echo $? 1 [root@shell ~]# unset aaa [root@shell ~]# echo $aaa 空值 [root@shell ~]# test -z $aaa [root@shell ~]# echo $? 0 [root@shell ~]# echo $aaa 空值 [root@shell ~]# [ -z aaa ] [root@shell ~]# echo $? 1

1.字符串判断登录账户
[root@shell ~]# vim login001.sh read -p "请输入账号" usr if [ $usr == "admin" ]; then    echo "欢迎登录: $user"    else    echo "账号或者密码错误" fi   [root@shell ~]# bash login001.sh  请输入账号admin 欢迎登录: [root@shell ~]# bash login001.sh  请输入账号as 账号或者密码错误

2.创建rpm检查nginx是否安装
[root@shell ~]# vim nginxrpm.sh #!/bin/bash rpm -qa|grep nginx #echo $? ​ yum -y install epel.relese ​ if [ $? -eq 1 ]; then     yum -y install nginx else     yum -y remove nginx      yum -y install nginx fi

5.文件、目录、权限的判断

1.或运算判断
[root@shell ~]# vim test002.sh #!/bin/bash read -p "请输入名称" name ​ if [ $name == "1" ]||[ $name == "2" ];then    echo "友好" else    echo "不友好" fi [root@shell ~]# bash test002.sh  请输入名称1 友好 [root@shell ~]# bash test002.sh  请输入名称2 友好 [root@shell ~]# bash test002.sh  请输入名称3 不友好 ​

2.与运算判断
 [root@localhost test]# vim yu.sh  #!/bin/bash  read -p "请输⼊⼀个数值:" age  if [ $age -gt 30 ]&&[ $age -lt 80 ];then # 这两个条件都得满足,大于30且小于80,可使用[ $age -gt 30 -a $age -lt 80 ]   echo "age>30 and age<80"   echo "working"  else    echo "in else"  fi   [root@localhost test]# sh ./yu.sh  请输⼊⼀个数值:60  age>30 and age<80  working  [root@localhost test]# sh ./yu.sh  请输⼊⼀个数值:90  in else  

3.混合判断
[root@shell ~]# vim eliftest.sh  #!/bin/bash echo "1新增文件 2删除文件 3修改文件 4查找文件" read -p "请输入序号选择功能" m if [ $m == 1 ]; then     touch aaa.txt elif [ $m == 2 ]; then     rm -rf aaa.txt else    echo "其他功能正在开发" fi [root@shell ~]# bash eliftest.sh  1新增文件 2删除文件 3修改文件 4查找文件 请输入序号选择功能1 [root@shell ~]# ls aaa.txt  

6.多重判断语法elif

if 多分支语句结构

if 条件1; then

命令,条件1成⽴执⾏

elif 条件2;then

命令,条件1不成⽴,条件2成⽴执⾏

elif 条件3;then

命令,条件1不成⽴,条件2不成⽴,条件3成⽴执⾏

else

命令 ,以上条件都不成⽴执⾏

fi

 [root@localhost test]# vim fs.sh  #!/bin/bash  #分数等级评定  read -p "请输⼊您的分数(0-100):" fs  if [ $fs -ge 0 -a $fs -lt 60 ];then   echo "$fs分,不及格!"  elif [ $fs -ge 60 -a $fs -lt 70 ];then   echo "$fs分,及格!"  elif [ $fs -ge 70 -a $fs -lt 85 ];then   echo "$fs分,良好!"  elif [ $fs -ge 85 -a $fs -le 100 ];then   echo "$fs分,优秀!"  else    echo "您输⼊的分数有误!"  fi   [root@localhost test]# sh ./fs.sh  请输⼊您的分数(0-100):20  20分,不及格!  [root@localhost test]# sh ./fs.sh  请输⼊您的分数(0-100):85  85分,优秀!  [root@localhost test]# sh ./fs.sh  请输⼊您的分数(0-100):70  70分,良好!  [root@localhost test]# sh ./fs.sh  请输⼊您的分数(0-100):123  您输⼊的分数有误! ​

7.多重判断的case语句

case $变量名称 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; *) 默认命令序列 esac

1.提示用户输入一个字符,判断该字符是字母、数字或者其他字符的脚本
 [root@localhost test]# vim hitkey.sh  #!/bin/bash  #击键类型识别  read -p "请输⼊⼀个字符,并按Enter键确认:" key  case $key in   [a-z]|[A-Z]) # a到z或A到Z,当变量输入为字母则执行下面的echo命令   echo "您输⼊的是⼀个 字⺟"   ;;    [0-9])  # 0到9,当变量输入为数字则执行下面的echo的命令   echo "您输⼊的是⼀个 数字"   ;;   *) # 若变量输入为空格等其他符号字符,则执行下面的echo命令   echo "您输⼊的是 空格、功能键或其他控制字符"   ;;  esac  [root@localhost test]# sh ./hitkey.sh  请输⼊⼀个字符,并按Enter键确认:5  您输⼊的是⼀个 数字  [root@localhost test]# sh ./hitkey.sh  请输⼊⼀个字符,并按Enter键确认:b  您输⼊的是⼀个 字⺟  [root@localhost test]# sh ./hitkey.sh  请输⼊⼀个字符,并按Enter键确认:P  您输⼊的是⼀个 字⺟  [root@localhost test]# sh ./hitkey.sh  请输⼊⼀个字符,并按Enter键确认:!  您输⼊的是 空格、功能键或其他控制字符 ​

2.输入分数变量,然后判定等级脚本
 [root@localhost test]# vim fscase.sh  #!/bin/bash  #使⽤case语句编写分数等级评定脚本  read -p "请输⼊您的分数(0-100):" fs  case $fs in   [0-9]|[0-5][0-9]) # 0到9或59以内的两位数   echo "$fs分,不及格!"   ;;   6[0-9]) # 6开头的两位数,若$fs输入为0,则判定为60,即执行下面的echo命令   echo "$fs分,及格!"   ;;   7[0-9]|8[0-5]) # 以7开头的两位数或以8开头的两位数   echo "$fs分,良好!"   ;;   8[6-9]|9[0-9]|100) # 以8开头的两位数,第二位最少为6,也就是最小是86 | 以9开头的两位数 | 100   echo "$fs分,优秀!"   ;;   *) # 输入不在上述规则内的其他字符,则echo如下命令   echo "您输⼊的分数有误!"  esac    [root@localhost test]# sh ./fscase.sh  请输⼊您的分数(0-100):5  5分,不及格!  [root@localhost test]# sh ./fscase.sh  请输⼊您的分数(0-100):58  58分,不及格!  [root@localhost test]# sh ./fscase.sh  请输⼊您的分数(0-100):69  69分,及格!  [root@localhost test]# sh ./fscase.sh  请输⼊您的分数(0-100):70  70分,良好!  [root@localhost test]# sh ./fscase.sh  请输⼊您的分数(0-100):89  89分,优秀!  [root@localhost test]# sh ./fscase.sh  请输⼊您的分数(0-100):100  100分,优秀!  [root@localhost test]# sh ./fscase.sh  请输⼊您的分数(0-100):110  您输⼊的分数有误! ​

8.循环语法

1.for循环

for 变量名 in 取值列表(范围) do 命令序列 done

2.分隔值循环
[root@shell ~]# vim citygood.sh ​ !/bin/bash ​ for city in 青岛 庆阳 do    echo "$city是个好地方" done [root@shell ~]# bash citygood.sh  青岛是个好地方 庆阳是个好地方

1.判断包是否已安装
 [root@localhost test]# vim 2.sh  #!/bin/bash  for softpack in wget gcc pcre pcre-devel zlib zlib-devel  do   soft_result=$(rpm -qa $softpack)   if [ -z "$soft_result" ];then   yum install -y $softpack   else   echo "$softpack is installed"   fi  done  [root@localhost test]# bash 2.sh  wget is installed  gcc is installed  pcre is installed  pcre-devel is installed  zlib is installed  zlib-devel is installed ​

2.在命令结果中循环
[root@shell ~]# vim shower.sh #!/bin/bash for u in $(awk -F ':' "{print $1}"  /etc/passwd) do  echo $u done [root@shell ~]# bash shower.sh  root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ​ [root@shell ~]# awk -F ":" '{print $1}' /etc/sysconfig/network-scripts/ifcfg-ens33  TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none

3.检测某个网段的存活主机
 [root@localhost test]# vim ping.sh  #!/bin/bash  for IP in $(echo 192.168.33.{100..120}) # 192.168.33网段的100到120的主机,在此循环  do   ping -c 2 -i 0.1 $IP &> /dev/null   if [ $? -eq 0 ];then   echo "Host $IP is up."   fi  done  :wq  [root@localhost test]# bash ping.sh  Host 192.168.100.100 is up.  Host 192.168.100.101 is up. ​

9.while循环

while 条件测试操作 do 命令序列 done

1.添加批量用户

创建时交互输入用户前缀、创建用户个数、初始密码、过期时间(可选设置),用户首次登陆强制要求修改密码

 [root@localhost test]# vim useradd.sh # 批量创建⽤户脚本  #!/bin/bash  read -p "请输⼊创建⽤户的名称前缀:" QZ  read -p "请输⼊创建⽤户的个数:" NUM  read -p "请输⼊⽤户的初始密码:" PS  i=1  while [ $i -le $NUM ]  do   useradd $QZ$i   echo "$PS" | passwd --stdin $QZ$i &> /dev/null   chage -d 0 $QZ$i   let i++  done  :wq  [root@localhost test]# bash useradd.sh  请输⼊创建⽤户的名称前缀:admin  请输⼊创建⽤户的个数:5  请输⼊⽤户的初始密码:123456  [root@localhost test]# tail /etc/passwd  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin  tcpdump:x:72:72::/:/sbin/nologin  yunjisuan:x:1000:1000:yunjisuan:/home/yunjisuan:/bin/bash  apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin  nginx:x:975:974:Nginx web server:/var/lib/nginx:/sbin/nologin  admin1:x:1001:1001::/home/admin1:/bin/bash  admin2:x:1002:1002::/home/admin2:/bin/bash  admin3:x:1003:1003::/home/admin3:/bin/bash  admin4:x:1004:1004::/home/admin4:/bin/bash  admin5:x:1005:1005::/home/admin5:/bin/bash ​

2. 批量删除用户
 批量删除用户  [root@localhost test]# vim userdel.sh # 批量删除⽤户脚本  #!/bin/bash  read -p "请输⼊要删除⽤户的前缀:" QZ  read -p "请输⼊要删除⽤户的个数:" NUM  i=1  while [ $i -le $NUM ]  do   userdel -r $QZ$i   let i++  done     [root@localhost test]# bash userdel.sh  请输⼊要删除⽤户的前缀:admin  请输⼊要删除⽤户的个数:5 ​

3.循环的 break 和 continue
 [root@localhost test]# vim test.sh  #!/bin/bash  for line in 北京 上海 ⼴州 深圳  do    echo $line   if [ "$line" == "上海" ];then # 循环到上海⽴即退出   break   fi   done  :wq  [root@localhost test]# bash test.sh  北京  上海  [root@localhost test]# vim test.sh  #!/bin/bash  for line in 北京 上海 ⼴州 深圳  do  if [ "$line" == "上海" ];then   continue  fi   echo $line  done  :wq  [root@localhost test]# bash test.sh  北京  ⼴州  深圳 ​

4.九九乘法表
 [root@localhost test]# vim 99.sh  #!/bin/bash  #九九乘法表  for i in {1..9};do   for j in {1..9};do   echo -n "$j*$i=$(($i*$j)) "   if [ $j == $i ];then   echo -e '\n'   break   fi   done  done  :wq  [root@localhost test]# bash 99.sh  1*1=1  1*2=2 2*2=4  1*3=3 2*3=6 3*3=9  1*4=4 2*4=8 3*4=12 4*4=16  1*5=5 2*5=10 3*5=15 4*5=20 5*5=25  1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36  1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49  1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64  1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 ​
[root@localhost test]# vim 99-2.sh  #!/bin/bash  #九九乘法表  i=1  while [ $i -le 9 ];do   j=1   while [ $j -le 9 ];do   echo -n "$j*$i=$(($i*$j)) "   if [ $j -eq $i ];then   echo -e '\n'   break   fi   let j++   done   let i++  done ​  [root@localhost test]# bash 99-2.sh  1*1=1  1*2=2 2*2=4  1*3=3 2*3=6 3*3=9  1*4=4 2*4=8 3*4=12 4*4=16  1*5=5 2*5=10 3*5=15 4*5=20 5*5=25  1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36  1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49  1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64  1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 ​

10.sed流式编辑器

sed 选项 “(定位符)指令” 文件名

(定位符)指令---想对文件的哪一行进行操作

-e指定要执行的命令 (操作) ,只有一个编辑命令 (操作) 时可省略
-n屏蔽默认输出 //不加选项-n默认先全文打印再执行命令打印所要求内容
-i直接修改源文件,不输出结果
-r支持扩展正则
1.行号定位
 [root@localhost day04]# sed "2p" /etc/hosts  127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4  ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6  ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6  加上-n不全文打印  [root@localhost day04]# sed -n "2p" /etc/hosts  ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6  打印第三行  [root@localhost day04]# sed -n "3p" /etc/passwd  daemon:x:2:2:daemon:/sbin:/sbin/nologin  打印一到三行  [root@localhost day04]# sed -n "1,3p" /etc/passwd  root:x:0:0:root:/root:/bin/bash  bin:x:1:1:bin:/bin:/sbin/nologin  daemon:x:2:2:daemon:/sbin:/sbin/nologin  打印第一行和第三行  [root@lib ~]# sed -n '1p;3p' ifcfg-ens33   TYPE=Ethernet  BROWSER_ONLY=no  打印奇数行 (行数从1开始每次自加2)  [root@localhost day04]# sed -n "1~2p" /etc/passwd  打印偶数行 (行数从2开始每次自加2)  [root@localhost day04]# sed -n "2~2p" /etc/passwd  打印第二行以及后面相邻的三行 (行数,+数字)---表示行数以及后面相邻的数字行  [root@localhost day04]# sed -n "2,+3p" /etc/passwd  bin:x:1:1:bin:/bin:/sbin/nologin  daemon:x:2:2:daemon:/sbin:/sbin/nologin  adm:x:3:4:adm:/var/adm:/sbin/nologin  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin ​

2.正则定位

sed可以使用正则匹配需要数据然后编辑数据 过滤出现root开头的行 [root@localhost day04]# sed -n "/^root/p" /etc/passwd 过滤三位数 [root@localhost day04]# sed -rn "/[0-9]{3}/p" /etc/passwd

1.sed修改配置
p(print)打印(输出)
d(delete)删除(整行)
s(substitution)替换关键字(字符串匹配)
c(replace)替换行(整行)
r(read)读取指定文件(追加到行后)| 导入文件(追加到行后)
a(append)追加到指定内容到行后
i (insert)追加指定内容到行前
w(write)写入文件 | 导出文件
=打印行号
[root@lib ~]# sed -i '4d' ifcfg-ens33     //删除第四行  [root@lib ~]# sed -i '3aBOOTPROTO="dhcp"' ifcfg-ens33     //将指定内容追加到第三行后面      [root@lib ~]# sed -i '/dhcp/ s/dhcp/none/g' ifcfg-ens33    //定位到dhcp的一行,并将dhcp换为none

2.sed命令引用变量

1、sed命令使用单引号的情况下,可以使用 '"$var"' 引用(单引号,然后 双引号,变量):

sed -i '2s/node_base/'"​i.xml2、sed命令中使用双引号的情况下,直接 shell command 或者 $(shell command) 引用命令执行。

sed -i "2s/node_base/​i.xml

上一篇:速通DHCP

下一篇:services-day01

相关内容

热门资讯

安卓系统app更新软件,And... 亲爱的手机控们,你们有没有发现,最近你的手机里那些熟悉的APP们,好像都悄悄地换上了新装呢?没错,安...
手机怎么安双卡安卓系统,轻松实... 你有没有想过,拥有一部可以同时使用两张SIM卡的手机是多么的方便呢?想象一张卡用来工作,另一张卡用来...
安卓系统卸载软件api,功能与... 手机里的软件越来越多,是不是感觉内存都要不够用了?别急,今天就来给你揭秘安卓系统卸载软件的神秘面纱,...
miui操作系统和安卓系统,深... 亲爱的手机控们,今天咱们来聊聊一个让无数米粉心动的系统——MIUI操作系统,还有那个它背后的老大哥—...
原生安卓系统使用教学,原生安卓... 哇,你手里拿的那部手机,是不是也觉得它有点儿特别呢?它可能没有那些花里胡哨的界面,但它却有着自己独特...
安卓系统玩咸鱼之王,三国名将助... 你有没有发现,最近安卓系统上的游戏圈里,有一款叫做《咸鱼之王》的游戏火得一塌糊涂?没错,就是那个让你...
鸿蒙1.0系统是安卓系统吗,揭... 你有没有听说最近华为的鸿蒙1.0系统?是不是有点好奇,这鸿蒙1.0系统是不是安卓系统的“亲戚”呢?别...
优盘安卓系统用桃,U盘安装An... 你有没有想过,你的电脑也能变身成安卓手机?没错,就是那种可以安装各种APP、玩游戏的安卓手机!这可不...
怎样使用安卓8系统,安卓8系统... 你有没有想过,你的安卓手机其实是个小智能助手,只要你会使用,它能帮你做很多事情呢!今天,就让我来带你...
鼎威安卓系统版本,性能升级与用... 你有没有发现,现在车机系统越来越智能了?这不,鼎威的安卓系统版本就让我眼前一亮。想象坐在车里,手指轻...
安卓系统安装抢红包,轻松成为抢... 亲爱的手机控们,是不是每次微信群里抢红包都感觉手慢无?别急,今天我要给你揭秘如何在安卓系统上轻松安装...
写ios系统和安卓系统的人,揭... 你有没有想过,那些默默无闻的程序员们,他们是如何创造出我们每天离不开的iOS系统和安卓系统呢?想象他...
安卓系统设计尺寸规范,适配与优... 亲爱的设计师们,你是否在为安卓系统的设计尺寸规范而头疼?别担心,今天我要带你一起探索这个神秘的领域,...
旧主机改安卓系统,安卓系统改造... 亲爱的读者们,你是否有过这样的经历:家里的旧主机闲置在角落,看着它那略显过时的外观,心里不禁感叹:“...
安卓系统里有趣的,尽在掌握 探索安卓乐园:那些让你笑出声的趣味游戏 开篇:手机里的欢乐小天地想象你手握一部安卓手机,屏幕上跳动...
法兰规格查询系统安卓,安卓版功... 你有没有想过,在繁忙的工程现场,如何快速找到合适的法兰规格呢?别急,今天就来给你揭秘一个神器——法兰...
目前安卓系统最高配置,极致性能... 你有没有发现,现在的手机越来越厉害了,就像是科幻电影里的高科技产品一样。今天,咱们就来聊聊这个话题:...
安卓修改系统返回键,个性化设置... 你有没有发现,手机里的那个小小的返回键,有时候就像是个顽皮的小家伙,让你摸不着头脑?别急,今天就来教...
安卓订餐系统教程视频,从设计到... 你是不是也和我一样,每天忙碌的生活中,最期待的就是那一顿美味的午餐或晚餐呢?现在,有了安卓订餐系统,...
安卓系统限制外部软件,探索外部... 亲爱的手机控们,你是否曾遇到过这样的烦恼:明明打开了“未知来源”,却还是无法安装那些心仪的外部软件?...