当前位置: 首页 > news >正文

shell脚本的语法使用及例题

1.if语句语法

1.1单分支结构

# 语法1:
if <条件表达式>
then指令
fi#语法2:
if <条件表达式>;then指令
fi

1.2双分支结构

if <条件表达式>
then指令序列1
else指令序列2
fi

1.3多分支结构

if 条件表达式1
then指令序列1
elif 条件表达式2
then指令序列2
else指令序列n
fi

1.4案例

例1:编写脚本choice1.sh,利用单分支结构实现输入2个整数,输出最大值

[root@master ~]# vim  choice1.sh#!/bin/bashread  -p  "请输入第一个整数: " xread  -p  "请输入第二个整数: " ymax=$xif (($max<y))
thenmax=$y
fiecho  "最大值:$max"

例2:编写脚本choice2.sh,判断系统内存剩余容量大小,若低于100M则发送消息进行告警

[root@master ~]# vim  choice2.sh
#!/bin/bashfree_mem=$( free -m  |  grep  Mem  |  tr -s  " "  |  cut -d " " -f4 )if (($free_mem<100))
thenecho  "警告,剩余内存:$free_mem ,低于警戒线100MB"
elseecho  "剩余内存:$free_mem,空间足够."
fi# free -m :表示显示内存即虚拟内存的信息,-m以MB单位显示数字
# grep  Mem:表示过滤包含Mem所在行
# tr  -s " ": 压缩空格为一个
# cut -d " " -f4 :以空格为间隔符,取其第4部分

例3:编写脚本choice3.sh,实现闰年的判断

[root@master ~]# vim  choice3.sh
#!/bin/bashread -p "请输入4位数整数年份: " year 
if [ -n "$year" ]                    # 非空测试
thenif ((year%4==0)) && ((year%100!=0)) || ((year%400==0))thenecho  "闰年"elseecho  "平年"fi
elseecho  "请输入有效4位整数年份"
fi

例4:编写脚本choice4.sh,判断主机是否存活

[root@master ~]# vim  choice4.sh
#!/bin/bashread -p "请输入测试主机的IP地址:"  ipping  -c 2 -w 3 $ip &> /dev/null
# -c 2 表示发送2个数据包,-w 3 表示等待3秒结束,注意:不能等待1秒结束,有可能第二个数据包没有ping完就结束了,会返回错误的状态码if [ $? -eq 0  ]
thenecho  "主机$ip 已运行"
elseecho  "主机$ip 未运行"
fi

例5:编写脚本choice5.sh,输入百分制成绩,判断等级成绩

[root@master ~]# vim  choice5.sh
#!/bin/bashread -p "请输入百分制成绩: " scoreif [ -z $score ]
thenecho  "未输入,请重新输入"
elif   [ $score -lt 0 -o $score -gt 100 ]
thenecho  "成绩输入有误,请输入0-100间数字"
elif  [ $score -ge 90 ]
thenecho  "成绩优秀"
elif   [ $score -ge 80 ]
thenecho  "成绩良好"
elif   [ $score -ge 60 ]
thenecho  "成绩及格"
elseecho  "补考"
fi

例6:编写脚本,根据用户输入的内容,判断是数字,字母,其他字符

[root@master ~]# vim  choice6.sh#!/bin/bashread -p  "请输入数字、字母、符号: "  strif  echo  $str | grep  [a-zA-Z] > /dev/null
thenecho  "字母"
elif   echo  $str | grep  [0-9] > /dev/null
thenecho  "数字"
elseecho  "符号"
fi

例7:编写脚本choice7.sh,判断当前主机cpu生产商

[root@master ~]# vim  choice7.sh
#!/bin/bashvendor=$(grep  "vendor_id"  /proc/cpuinfo | uniq | cut -d " " -f2)if [ $vendor == GenuineIntel ]
then    echo  "Intel"
elif [ $vendor == AuthenticAMD ]
then    echo  "AMD"
else    echo   "other"
fi      

2.for循环

2.1带列表的for循环

格式:

for variable in {list}
dostatement1statement2...
done

2.1.2分析

variable称为循环变量

list是一个列表,可以是一系列的数字或者字符串,元素之间使用空格隔开

do和done之间的所有的语句称为循环体,即循环结构中重复执行的语句

执行时,shell会将in关键字后面的list列表的第1个元素的值赋给变量variable,然后执行循环体,当循环体中的语句执行完毕之后剩余以此类推,当list列表中的所有的元素都被访问后,for循环结构终止,程序将继续执行done语句后面的其他的语句

2.1.3例题

[root@master ~]# vim  for1.sh
#!/bin/bashfor ip in 192.168.75.154 192.168.75.155
doecho $ip
done[root@master ~]# bash for1.sh 
192.168.75.154
192.168.75.155

2.2不带列表的for循环

原则:for不提供循环列表,shell将从命令行获取循环列表数据及条件,格式:

for variable
dostatement1statement2...
done

2.2.1例题

[root@master ~]# vim for2.sh
#!/bin/bashfor  arg
do      echo  $arg
done    
[root@master ~]# bash for2.sh   {1..10}

2.3基于c语言风格的for循环

2.3.1格式

for ((初始化;条件表达式;步长))    # 注意:2个园括号
dostatement1statement2...
done

2.3.2例题:批量创建账户

[root@master ~]# vim for3.sh
#!/bin/bashfor ((i=1;i<=10;i++))
doif  ! id -u test$i &> /dev/nullthenuseradd  test$iecho  "123456" | passwd --stdin test$i  &>  /dev/nullelseecho  "test$i 已存在!"fi
done

3.while循环

3.1格式

while  expression
dostatement1statement1……
done

例题:猜商品价格,通过变量RANDOM获取随机整数并控制20以内,提示用户猜测商品价格,猜测时需要记录次数,猜中后退出程序

[root@server ~]# vim  while1.sh
#!/bin/bash# RANDOM是一个环境变量,产生[1,32767]的整数,对20取余是控制随机数在1-19间
PRICE=$((RANDOM%20)) 
count=0while true             # 恒真执行
doread  -p "请输入[1-20]间的商品价格: "  INT((count++))if (($INT==$PRICE))thenecho "恭喜,你猜对了!"echo  "你使用了$count次机会."break                       # 跳出while循环elif   (($INT>$PRICE))thenecho  "你输入的商品价格高了."elseecho  "你输入的商品价格低了."fi
done

4.循环控制

4.1组成

break:是立即跳出某个循环结构。break语句可以用在for,while或者until等循环语句的循环体中

continue:作用不是退出循环体。而是跳过当前循环体中该语句后面的语句,重新从循环语句开始的位置执行

4.2示例

例1:判断素数

[root@master ~]# vim  for10.sh
#!/bin/bashread  -p  "请输入一个正整数: "  primeif ((prime<2))
thenecho  "数据错误,请输入大于等于2的正整数."
elsefor ((i=2;i<prime;i++))doif ((prime%i==0))thenecho  "平数"breakfidoneif ((prime==i))thenecho "素数"fi
fi

http://www.lryc.cn/news/607253.html

相关文章:

  • 10.Linux 用户和组的管理
  • 数据结构——查找(一、什么是查找?)
  • 嵌入式 C 语言入门:函数封装与参数传递学习笔记 —— 从定义到内存机制
  • Vue+Cesium 基础搭建
  • LT3045EDD#TRPBF ADI亚德诺半导体 线性稳压器 电源管理应用设计
  • 优化算法专栏——阅读导引
  • 【OneAPI】网页搜索API和网页正文提取API
  • 让 OAuth 授权码流程更安全的 PKCE 技术详解
  • linux下非Docker模式部署Xinference并部署Rerank模型
  • 最新docker国内镜像源地址大全
  • DreamBoards 借助 DreamHAT+ 雷达插件为 Raspberry Pi 提供 60GHz 毫米波雷达
  • 基于STM32+FPGA工业打印机运动控制卡的核心解决方案
  • Spring Boot微服务性能优化实践指南:从配置到监控
  • MT Photos图库部署详解:Docker搭建+贝锐蒲公英异地组网远程访问
  • 无人机模式的切换
  • PendingIntent相关流程解析
  • 我的博客系统测试报告
  • PHP转Java笔记
  • 前端图片懒加载的深度指南:从理论到实战
  • 浏览器环境segmentit实现中文分词
  • windows内核研究(软件调试-调试事件采集)
  • 性能测试-性能测试中的经典面试题一
  • Nginx跨域问题与 MIME 类型错误深度排错指南:解决 MIME type of “application/octet-stream“ 报错
  • CAN通信协议
  • 从零到英雄:掌握神经网络的完整指南
  • 大模型开发框架LangChain之构建知识库
  • YOLOv8/YOLOv11 C++ OpenCV DNN推理
  • 深入浅出理解WaitForSingleObject:Windows同步编程核心函数详解
  • 大模型幻觉的本质:深度=逻辑层次,宽度=组合限制,深度为n的神经网络最多只能处理n层逻辑推理,宽度为w的网络无法区分超过w+1个复杂对象的组合
  • 前沿智能推荐算法:基于多模态图神经网络的隐私保护推荐系统