shell编程(完结)

shell编程(完结)

声明!

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

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

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

1、不同脚本的互相调用

先给1.sh写入以下代码

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

再为2.sh写入以下代码

test 复制代码
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中写入以下命令

test 复制代码
#/bin/bash

touch 2.txt
echo "hello world!" > 2.txt

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

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

文件描述符

0:标准输入

1:标准输出

2:错误输出

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

制作一个计算器

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

test 复制代码
#!/bin/bash

# 显示菜单
echo "选择操作:"
echo "1. 加法"
echo "2. 减法"
echo "3. 乘法"
echo "4. 除法"
echo "5. 退出"

# 读取用户选择
read -p "输入选择(1/2/3/4/5):" option

case $option in
1) echo "输入第一个数字:"
   read num1
   echo "输入第二个数字:"
   read num2
   echo "结果是:$((num1 + num2))"
   ;;
2) echo "输入第一个数字:"
   read num1
   echo "输入第二个数字:"
   read num2
   echo "结果是:$((num1 - num2))"
   ;;
3) echo "输入第一个数字:"
   read num1
   echo "输入第二个数字:"
   read num2
   echo "结果是:$((num1 * num2))"
   ;;
4) echo "输入第一个数字:"
   read num1
   echo "输入第二个数字:"
   read num2
   if [ $num2 -eq 0 ]; then
      echo "除数不能为0。"
   else
      echo "结果是:$((num1 / num2))"
   fi
   ;;
5) echo "退出程序。"
   exit 0
   ;;
*) echo "非法输入。"
   ;;
esac

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

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

test 复制代码
sudo apt-get update
sudo apt-get install bc

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

test 复制代码
#!/bin/bash

# 显示菜单
echo "选择操作:"
echo "1. 加法"
echo "2. 减法"
echo "3. 乘法"
echo "4. 除法"
echo "5. 退出"

# 读取用户选择
read -p "输入选择(1/2/3/4/5):" option

case $option in
1) echo "输入第一个数字:"
   read num1
   echo "输入第二个数字:"
   read num2
   echo "结果是:$(awk "BEGIN {print $num1 + $num2}")"
   ;;
2) echo "输入第一个数字:"
   read num1
   echo "输入第二个数字:"
   read num2
   echo "结果是:$(awk "BEGIN {print $num1 - $num2}")"
   ;;
3) echo "输入第一个数字:"
   read num1
   echo "输入第二个数字:"
   read num2
   echo "结果是:$(awk "BEGIN {print $num1 * $num2}")"
   ;;
4) echo "输入第一个数字:"
   read num1
   echo "输入第二个数字:"
   read num2
   if [ $num2 -eq 0 ]; then
      echo "除数不能为0。"
   else
      echo "结果是:$(awk "BEGIN {print $num1 / $num2}")"
   fi
   ;;
5) echo "退出程序。"
   exit 0
   ;;
*) echo "非法输入。"
   ;;
esac

相关推荐
枷锁—sha2 小时前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
liann1195 小时前
3.1_网络——基础
网络·安全·web安全·http·网络安全
ESBK20257 小时前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
旺仔Sec7 小时前
一文带你看懂免费开源 WAF 天花板!雷池 (SafeLine) 部署与实战全解析
web安全·网络安全·开源·waf
七牛云行业应用7 小时前
Moltbook一夜崩盘:150万密钥泄露背后的架构“死穴”与重构实战
网络安全·postgresql·架构·高并发·七牛云
原来是你~呀~8 小时前
Strix:AI驱动的全自动安全测试平台,LinuxOS部署
网络安全·自动化渗透测试·strix
fendouweiqian8 小时前
AWS WAF(配合 CloudFront)基础防护配置:免费能做什么、要不要开日志、如何限制危险方法
网络安全·aws·cloudfront
乾元8 小时前
终端安全(EDR):用深度学习识别未知勒索软件
运维·人工智能·网络协议·安全·网络安全·自动化·安全架构
Whoami!9 小时前
⓫⁄₁₃ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ 利用Windows计划任务提权
网络安全·信息安全·利用windows计划任务提权
虚构之人1 天前
二进制漏洞挖掘(WinAFL Fuzzing)Windows篇
汇编·网络安全·信息安全·系统安全