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

shell编程补充内容(Linux课程实验3)

一、求前五个偶数的和

1.这里先介绍要用到的expr

1. 整数计算
# 加法(注意运算符两侧空格)
$ expr 10 + 20
30# 带括号的运算(需要转义)
$ expr \( 10 + 20 \) \* 2
60# 取模运算
$ expr 15 % 4

注意:仅支持整数,不支持小数运算3

2. 字符串操作
# 计算字符串长度
$ expr length "helloworld"
10# 查找字符位置(返回首次出现的索引)
$ expr index "abcdef" "cd"# 提取子字符串(位置从1开始)
$ expr substr "linuxshell" 3 5
nuxsh# 正则匹配(返回匹配的字符数)
$ expr match "hello123" ".*[0-9]"
3. 逻辑比较
# 比较两个数值
$ expr 10 \> 5
1  # 返回1表示真# 判断字符串相等性
$ expr "abc" = "abc"
运算类型expr写法$(( ))写法let写法
加法expr $a + $b$((a + b))let res=a+b
乘法expr $a \* $b$((a * b))let res=a*b
复合运算expr \( ... \)$(( ( ... )) )支持原生括号

带变量的字符串拼接计算

read -p "输入第一个数: " input1
read -p "输入第二个数: " input2
total=$(expr $input1 + $input2)
echo "计算结果: $input1 + $input2 = $total"

数直接相加

num1=15
num2=30
sum=$(expr $num1 + $num2)
echo "15 + 30 = $sum"  # 输出 45

2.代码编写

该脚本计算从0开始的前5个偶数之和,最终输出结果为20。数学表达式为:0+2+4+6+8=200+2+4+6+8=20

二、设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。(暂时没有完成)

 mkdir -p 会创建这些上级目录,确保整个目录路径都被创建。
例如,如果你执行 sudo mkdir -p /etc/docker,这个命令会创建 /etc/docker 目录。如果 /etc 目录已经存在,那么 docker 目录会被创建在 /etc 下。如果 /etc 目录不存在,mkdir -p 会先创建 /etc 目录,然后再创建 docker 目录。

 ‌sudo groupadd -f class1命令中,-f选项的作用是强制执行。

具体来说,-f选项的作用是即使指定的组已经存在,也会以成功状态退出。当与-g选项一起使用时,如果指定的组已经存在,并且与-g选项指定的组名相同,-f选项会使得命令执行成功,而不是报错‌

三、自己编写一个脚本

由键盘循环输入学生的成绩,并根据学生成绩输出相应的成绩等级,若小于60分,则输出“not pass ”,若成绩大于60小于等于70分,则输出“D”,若成绩大于70分,小于等于80分,则输出“C”,若成绩大于80小于九十,则输出“B”,若成绩大于九十分,则输出“A”。

#!/bin/bashwhile true; doread -p "请输入学生成绩(输入q退出): " input# 退出条件判断if [[ "$input" == "q" ]]thenecho "程序已退出"breakfi# 输入有效性验证if [[ ! "$input" =~ ^[0-9]+(\.[0-9]+)?$ ]]thenecho "错误:请输入数字或q退出"continuefi# 数值范围验证score=$(echo "$input" | bc)if [[ $(echo "$score < 0 || $score > 100" | bc -l) -eq 1 ]]thenecho "错误:成绩应在0-100之间"continuefi# 成绩分级逻辑if [[ $(echo "$score >= 90" | bc -l) -eq 1 ]]thengrade="A"elif [[ $(echo "$score >= 80" | bc -l) -eq 1 ]]thengrade="B"elif [[ $(echo "$score >= 70" | bc -l) -eq 1 ]]thengrade="C"elif [[ $(echo "$score >= 60" | bc -l) -eq 1 ]]thengrade="D"elsegrade="未通过"fiecho "成绩等级:$grade"
done
  • read -p显示交互式提示符
  • 有效性认证使用了正则表达式进行判断,相关内容学习请查看:创作中心-CSDN
  • [[ ... ]]:这是 bash 中用于条件测试的双中括号结构,相较于单中括号 [ ... ] 支持更多的特性,比如正则表达式匹配。

    在 if [[ $(echo "$score < 0 || $score > 100" | bc) -eq 1 ]] 中:

  • echo "$score < 0 || $score > 100" 会输出一个布尔表达式,例如 80 < 0 || 80 > 100
  • | bc 会对这个布尔表达式进行求值,若表达式为真,bc 会输出 1;若为假,则输出 0

相关文章:

  • 胶合目录解释
  • 如何提升个人情商?
  • TF-IDF算法详解
  • 【Godot】使用 Shader 实现可配置圆角效果
  • 缓存与数据库的高效读写流程解析
  • C++动态内存分配:从基础到最佳实践
  • 【数据结构】线性表--链表
  • 【Linux系统】互斥量mutex
  • Spring AI 实战:第八章、Spring AI Tool Calling之与时俱进
  • Android基于绑定的控件用法
  • SpringBoot的启动流程
  • NoSQL入门实战:MongoDB与Redis核心应用全解析
  • 从 Java 开发到 AI 工程师:全面学习指南
  • 【漫话机器学习系列】238.训练误差与测试误差(Training Error And Test Error)
  • Spring AI 实战:第十一章、Spring AI Agent之知行合一
  • 56认知干货:智能化产业
  • 《政治最后的日子》章节
  • 电动调节 V 型球阀:颗粒状含碱浆液介质的完美解决方案-耀圣
  • 原码、补码、反码、有符号整数、无符号整数
  • 【漫话机器学习系列】239.训练错误率(Training Error Rate)
  • 陈燮阳从艺60周年:指挥棒不停,心跳就不会老去
  • 严正交涉!我驻日使馆:如日方采取新的挑衅举动,中方必坚决反制
  • 10家A股农商行一季报:净利均实现增长,常熟银行营收、净利增速领跑
  • 人民日报评论员:把造福人民作为根本价值取向
  • 叙利亚多地遭以色列空袭
  • 微软上财季净利增长18%:云业务增速环比提高,业绩指引高于预期