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

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
http://www.xdnf.cn/news/3742.html

相关文章:

  • 【SpringAI+阿里云百炼】AI对话4个Demo
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.3 异常值识别(Z-score法/IQR法/业务规则法)
  • 力扣每日一题1007、行相等的最少多米诺旋转
  • 爬虫管理平台-最新版本发布
  • 李沐《动手学深度学习》 | Softmax回归 - 分类问题
  • 【AI面试准备】从0-1搭建人工智能模型自动化评估理论与测试,掌握测试数据集建立与优化,熟练数据处理和模型评测工作
  • RV1126单目摄像头取流,实现双路输出(一路H.264编码推流,一路给算法)
  • 【React】 Hooks useTransition 解析与性能优化实践
  • 套接字+Socket连接
  • Y1模拟一 补题报告
  • function包装器的意义
  • Milvus(13):自定义分析器、过滤器
  • Dubbo(94)如何在金融系统中应用Dubbo?
  • validator - Go 结构体验证库
  • 每天五分钟深度学习框架PyTorch:基于Dataset封装自定义数据集
  • 深入理解Java垃圾回收机制
  • NV228NV254固态美光颗粒NV255NV263
  • 2025年01月03日美蜥(杭州普瑞兼职)一面
  • 【C++ Qt】输入类控件(上) LineEdit、QTextEdit
  • 升级 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后验证指南:功能与虚拟环境检测
  • 黑马点评day01(基于Redis)
  • C++学习:六个月从基础到就业——C++11/14:右值引用与移动语义
  • Webug4.0靶场通关笔记14- 第18关 文件上传之Nginx解析缺陷
  • Linux线程深度解析:从基础到实践
  • 码蹄集——偶数位、四边形坐标
  • 南京优质的公司有哪些?
  • 小程序 IView WeappUI组件库(简单增删改查)
  • 变更需求代价:影响分析
  • Java面试大纲(以及常见面试问答)
  • 19、权限控制:分院帽系统——React 19 RBAC实现