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

shell编程(完结)

shell编程(完结)

声明!

学习视频来自B站up主 泷羽sec有兴趣的师傅可以关注一下,如涉及侵权马上删除文章

笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!

有兴趣的小伙伴可以点击下面连接进入b站主页​**B站泷羽sec**

1、不同脚本的互相调用

先给1.sh写入以下代码

#/bin/bash
source 2.sh
echo "My name is $name,and i am $age years old."

再为2.sh写入以下代码

name="fengyijiu"
age=18

然后执行1.sh,就会输出

在这里插入图片描述

2、重定向

如果我们使用ls > 1.txt,则会执行ls命令,并将查到的信息重定向到1.txt文件中。

但是这种重定向会覆盖掉1.txt文件原本的内容,如果我们需要将数据追加至1.txt文件,而不是覆盖,则使用>>来实现,具体例子如下:

在这里插入图片描述

/dev/null是一个特殊的文件,被称为“空设备”或“空设备文件”。这个文件会丢弃所有写入到它的数据,就好像一个黑洞一样。当你读取/dev/null时,它立即返回一个文件结束(EOF)标记。
在命令行操作中,/dev/null常常被用来丢弃不需要的输出。例如,如果你运行一个命令,但是并不关心这个命令的输出,你就可以将输出重定向到/dev/null,这样命令的输出就会被丢弃,不会显示在终端或者写入到其他文件。

我们在1.sh中写入以下命令

#/bin/bashtouch 2.txt
echo "hello world!" > 2.txt# 创建一个2.txt文件,并将"hello world!"写入到2.txt文件中

然后我们执行一下1.sh,我们可以发现脚本执行了,但是没有任何回显

在这里插入图片描述

文件描述符

0:标准输入

1:标准输出

2:错误输出

在这里插入图片描述

当我们需要将执行成功的输出存放到一个文件,将执行失败的输出存放到另一个文件中,我们可以利用文件描述符来进行该操作,使得我们能够准确获取需要的信息,比如报错信息能让我们准确的定位到出现的问题上。

制作一个计算器

通过之前的shell脚本学习,我们可以做出一个简易的计算器

#!/bin/bash# 显示菜单
echo "选择操作:"
echo "1. 加法"
echo "2. 减法"
echo "3. 乘法"
echo "4. 除法"
echo "5. 退出"# 读取用户选择
read -p "输入选择(1/2/3/4/5):" optioncase $option in
1) echo "输入第一个数字:"read num1echo "输入第二个数字:"read num2echo "结果是:$((num1 + num2))";;
2) echo "输入第一个数字:"read num1echo "输入第二个数字:"read num2echo "结果是:$((num1 - num2))";;
3) echo "输入第一个数字:"read num1echo "输入第二个数字:"read num2echo "结果是:$((num1 * num2))";;
4) echo "输入第一个数字:"read num1echo "输入第二个数字:"read num2if [ $num2 -eq 0 ]; thenecho "除数不能为0。"elseecho "结果是:$((num1 / num2))"fi;;
5) echo "退出程序。"exit 0;;
*) echo "非法输入。";;
esac

在这里插入图片描述

但是这种写法有个小缺陷,就是不能输入非整数,否则会报错

在这里插入图片描述

如果要解决无法输入小数的问题,需要安装bc工具

sudo apt-get update
sudo apt-get install bc

安装之后,可以借助该工具来实现小数的加减乘除

#!/bin/bash# 显示菜单
echo "选择操作:"
echo "1. 加法"
echo "2. 减法"
echo "3. 乘法"
echo "4. 除法"
echo "5. 退出"# 读取用户选择
read -p "输入选择(1/2/3/4/5):" optioncase $option in
1) echo "输入第一个数字:"read num1echo "输入第二个数字:"read num2echo "结果是:$(awk "BEGIN {print $num1 + $num2}")";;
2) echo "输入第一个数字:"read num1echo "输入第二个数字:"read num2echo "结果是:$(awk "BEGIN {print $num1 - $num2}")";;
3) echo "输入第一个数字:"read num1echo "输入第二个数字:"read num2echo "结果是:$(awk "BEGIN {print $num1 * $num2}")";;
4) echo "输入第一个数字:"read num1echo "输入第二个数字:"read num2if [ $num2 -eq 0 ]; thenecho "除数不能为0。"elseecho "结果是:$(awk "BEGIN {print $num1 / $num2}")"fi;;
5) echo "退出程序。"exit 0;;
*) echo "非法输入。";;
esac

在这里插入图片描述

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

相关文章:

  • UNIX数据恢复—UNIX系统常见故障问题和数据恢复方案
  • adb连接逍遥安卓模拟器失败的问题解决方案
  • 【昇腾】NPU ID:物理ID、逻辑ID、芯片映射关系
  • Three.js曲线篇 8.管道漫游
  • scala基础_数据类型概览
  • 【LeetCode刷题之路】622.设计循环队列
  • 暂停一下,给Next.js项目配置一下ESLint(Next+tailwind项目)
  • Windows系统磁盘与分区之详解(Detailed Explanation of Windows System Disks and Partitions)
  • 顺序表的使用,对数据的增删改查
  • XDMA与FPGA:高效数据传输的艺术
  • #思科模拟器通过服务配置保障无线网络安全Radius
  • 浅谈Python库之pillow
  • Android通过okhttp下载文件(本文案例 下载mp4到本地,并更新到相册)
  • 计算机网络从诞生之初到至今的发展历程
  • Kudu 源码编译-aarch架构 1.17.1版本
  • SEC_ASA 第二天作业
  • 操作系统(5)进程
  • 6_Sass 选择器函数 --[CSS预处理]
  • 考研数学【线性代数基础box(数二)】
  • ModbusTcp获取数据
  • java 知识点:注解及使用
  • AI预测体彩排3采取888=3策略+和值012路+胆码+通杀1码测试12月13日升级新模型预测第156弹
  • faiss数据库检索不稳定
  • Vue技术中参数传递:Props与事件的实践指南
  • C++【基础】 ---- 快速入门 C++
  • Neo4j+Neovis+Vue3:前端连接数据库渲染
  • React 18
  • Java:集合(List、Map、Set)
  • 使用秘钥登录服务器
  • BFS算法题