#渗透测试#SRC漏洞挖掘#网络运维# 脚本编写番外篇-小练习
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。
目录
一、用shell写一个计算器
通过read命令获取用户输入的表达式,表达式的格式设定为操作数1 运算符 操作数2,例如5+3,然后利用涉及的脚本输出运算结果。
要求:实现加,减,乘,除运算
1. 脚本思路
使用read命令获取用户输入的表达式。
根据表达式中的运算符,使用case语句来执行相应的运算操作。
对于除法运算,需要注意除数不能为0的情况。
2. 代码实现
#!/bin/bash
echo "请输入表达式(格式:操作数1 运算符 操作数2):"
read expr
operand1=$(echo $expr | awk '{print $1}')
operator=$(echo $expr | awk '{print $2}')
operand2=$(echo $expr | awk '{print $3}')
case $operator in
"+")
result=$(($operand1 + $operand2))
;;
"-")
result=$(($operand1 - $operand2))
;;
"*")
result=$(($operand1 * $operand2))
;;
"/")
if [ $operand2 -eq 0 ]; then
echo "除数不能为0"
exit 1
else
result=$(echo "scale=2; $operand1 / $operand2" | bc)
fi
;;
*)
echo "不支持的运算符"
exit 1
;;
esac
echo "结果:$result"
3. 代码解释
首先,通过echo提示用户输入表达式,然后使用read命令读取用户输入并存储在expr变量中。
使用awk命令从表达式中分别提取出操作数1、运算符和操作数2,并分别存储在operand1、operator和operand2变量中。
在case语句中,根据不同的运算符执行相应的运算:
对于加法、减法和乘法,直接使用$((...))进行整数运算。
对于除法,先判断除数是否为0,如果不为0,则使用bc命令进行浮点数运算(这里设置了scale=2,表示保留两位小数)。
如果用户输入的运算符不被支持,则输出错误信息并退出脚本。
最后,输出运算结果。
二、用Sheel定义一个求n的阶乘函数
定义一个计算n的阶乘的函数(含参函数、if判断、for循环)
写一个脚本去调用求阶乘的函数,并定义一个变量n,可用read交互输入,最终输出n的阶乘
#!/bin/bash
# 定义计算阶乘的函数
factorial() {
local n=$1
local result=1
if [ $n -eq 0 ] || [ $n -eq 1 ]; then
result=1
else
for ((i=2; i<=n; i++)); do
result=$((result * i))
done
fi
echo $result
}
# 脚本部分
echo "请输入一个整数n:"
read n
# 调用阶乘函数并输出结果
echo "n的阶乘是: $(factorial $n)"
解释
函数定义:
factorial()函数接受一个参数n,用于计算n的阶乘。
使用local关键字定义局部变量n和result,确保这些变量的作用域仅限于函数内部。
if判断:
如果n等于0或1,直接返回1,因为0和1的阶乘都是1。
for循环:
使用for循环从2到n进行迭代,计算乘积并存储在result变量中。
交互输入:
使用read命令从用户获取输入并存储在变量n中。
函数调用:
调用factorial函数,并将结果输出到终端。
将上述代码保存为factorial.sh ,然后通过以下命令运行脚本:
chmod +x factorial.sh
./factorial.sh
运行后,脚本将提示用户输入一个整数,并计算并输出该整数的阶乘。
拓展:
写一个shell脚本去筛选etho网卡的ipv4地址,并赋值一个变量输出
(可以去了解grp,awk文本处理工具)
#!/bin/bash
# 使用ip命令获取eth0网卡的IPv4地址
ipv4_address=$(ip addr show eth0 | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1')
# 如果ipv4_address变量为空,则说明没有找到有效的IPv4地址
if [ -z "$ipv4_address" ]; then
echo "未找到eth0网卡的IPv4地址"
else
# 将IPv4地址赋值给变量并输出
echo "eth0网卡的IPv4地址是: $ipv4_address"
fi
解释
ip addr show eth0:
使用ip命令获取eth0网卡的网络接口信息。
grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*':
使用grep命令筛选出包含IPv4地址的行。-E选项表示使用扩展正则表达式,-o选项表示只输出匹配的部分。
grep -Eo '([0-9]*\.){3}[0-9]*':
再次使用grep命令从上一步的输出中提取出IPv4地址。
grep -v '127.0.0.1':
使用grep -v命令排除掉127.0.0.1(本地回环地址),确保只保留实际的外部IPv4地址。
变量赋值和输出:
将筛选出的IPv4地址赋值给变量ipv4_address。
检查变量是否为空,如果为空则说明没有找到有效的IPv4地址,输出提示信息;否则输出IPv4地址。
将上述代码保存为get_ipv4.sh ,然后通过以下命令运行脚本:
chmod +x get_ipv4.sh
./get_ipv4.sh
运行后,脚本将筛选出eth0网卡的IPv4地址,并将其赋值给变量并输出。
将上面的脚本编辑到计划任务中,并将echo输出内容重定向到一个固定的文件夹中,计划时间随意一天一次也可以。
(了解LINUX中的计划任务)
1. 创建一个计划任务
首先,编辑crontab文件以添加计划任务。使用以下命令打开crontab编辑器:
crontab -e
在打开的编辑器中,添加以下行来每天运行一次脚本,并将输出重定向到指定的文件中。假设你的脚本名为get_ipv4.sh ,输出文件名为eth0_ipv4_address.log ,输出文件夹为/path/to/logs:
0 0 * * * /path/to/get_ipv4.sh >> /path/to/logs/eth0_ipv4_address.log 2>&1
2. 确保脚本有执行权限
确保你的脚本有执行权限。使用以下命令为脚本添加执行权限:
chmod +x /path/to/get_ipv4.sh
3. 创建日志文件夹(如果不存在)
确保日志文件夹存在。如果不存在,请创建它:
mkdir -p /path/to/logs
4. 脚本内容
以下是完整的脚本内容,包括计划任务中的重定向操作:
#!/bin/bash
# 使用ip命令获取eth0网卡的IPv4地址
ipv4_address=$(ip addr show eth0 | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1')
# 如果ipv4_address变量为空,则说明没有找到有效的IPv4地址
if [ -z "$ipv4_address" ]; then
echo "未找到eth0网卡的IPv4地址"
else
# 将IPv4地址赋值给变量并输出
echo "eth0网卡的IPv4地址是: $ipv4_address"
fi
5. 验证计划任务
你可以使用以下命令来查看已添加的计划任务,以确保其正确性:
crontab -l
通过以上步骤,你已经成功将脚本添加到计划任务中,并配置其每天运行一次,同时将输出内容重定向到指定的日志文件中。确保你的脚本和日志文件路径正确,并验证计划任务是否已正确添加。
做一个像Windows中的一样无限重启脚本(了解LINUX中的自启动)
(注意:先拍个快照)
无限重启脚本
#!/bin/bash
# 无限重启脚本
while true; do
echo "系统将在10秒后重启..."
sleep 10
reboot
done
解释
#!/bin/bash:
指定脚本使用Bash解释器运行。
while true; do ... done:
创建一个无限循环,while true表示循环将一直运行,直到被手动中断。
echo "系统将在10秒后重启...":
输出一条消息,通知用户系统将在10秒后重启。
sleep 10:
暂停脚本执行10秒,然后继续执行下一行。
reboot:
重启系统。
使用方法
保存脚本:
将上述脚本保存为infinite_reboot.sh 。
赋予执行权限:
使用以下命令为脚本添加执行权限:
chmod +x infinite_reboot.sh
运行脚本:
运行脚本以开始无限重启系统:
./infinite_reboot.sh
注意事项
谨慎使用:无限重启系统可能会导致数据丢失或系统不稳定,请确保你了解风险并谨慎使用。
手动中断:如果需要停止无限重启,可以手动中断脚本执行,例如使用Ctrl+C。
系统保护:大多数现代操作系统具有防止系统无限重启的保护机制,因此这个脚本可能无法在所有系统上正常工作。
原文地址:https://blog.csdn.net/m0_62828084/article/details/144200772
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!