⼀、⽤Shell写⼀个计算器
#!/bin/bash
read -p "请输入表达式(格式为 操作数1 运算符 操作数2,如 5 + 3):" expression
a1=$(echo $expression | awk '{print $1}')
a2=$(echo $expression | awk '{print $2}')
a3=$(echo $expression | awk '{print $3}')
if [ "$a2" == "+" ]; then
result=$(($a1 + $a3))
echo "$a1 $a2 $a3 = $result"
elif [ "$a2" == "-" ]; then
result=$(($a1 - $a3))
echo "$a1 $a2 $a3 = $result"
elif [ "$a2" == "*" ]; then
result=$(($a1 * $a3))
echo "$a1 $a2 $a3 = $result"
elif [ "$a2" == "/" ]; then
if [ $a3 -eq 0 ]; then
echo "除数不能为0,请重新输入"
else
result=$(($a1 / $a3))
echo "$a1 $a2 $a3 = $result"
fi
else
echo "不支持的运算符,请输入 +、-、*、/ 中的一种"
Fi
⼆、⽤Shell定义⼀个求n的阶乘函数
#!/bin/bash
# 定义计算阶乘的函数
factorial () {
n=$1
result=1
if [ $n -eq 0 ]; then
result=1
else
for ((i=1; i<=$n; i++)); do
result=$(($result * $i))
done
fi
echo $result
}
# 使用read命令获取用户输入的n值
read -p "请输入一个整数n,用于计算n的阶乘:" n
# 调用函数并输出结果
factorial $n
拓展1:
写⼀个Shell脚本去筛选出eth0⽹卡的ipv4地址,并赋值⼀个变量输出
(可以去了解grep、awk文本处理工具)
#!/bin/bash
# 使用ip命令获取网络接口信息,通过grep筛选出包含eth0的行,再用awk提取出ipv4地址部分
ipv4_address=$(ip addr show eth0 | grep "inet " | awk '{print $2}' | cut -d/ -f1)
echo "eth0网卡的ipv4地址是: $ipv4_address"
拓展2:将上⾯的脚本编辑到计划任务中,并将echo输出内容重定向到⼀个固定⽂件中,计划时间随意⼀天⼀次也可以(了解LINUX中的计划任务)
使用 crontab -e 命令打开计划任务编辑界面(如果是首次使用此命令,系统会提示你选择一个文本编辑器,像 vim、nano 等,按个人习惯选择即可)。
在打开的编辑文件中添加一行类似如下的内容(此处以每天凌晨 3 点执行脚本,并将输出重定向到 /home/kali/eth0_ip_log.txt 文件为例,你可按需修改时间及输出文件路径等细节):
0 3 * * * /home/kali/桌面/4.sh > /home/kali/eth0_ip_log.txt 2>&1
拓展 3:做一个像 Windows 中的一样无限重启脚本(了解 LINUX 中的自启动)
#! /bin/bash
while true; do
reboot
sleep 10
done