自学内容网 自学内容网

#渗透测试#SRC漏洞挖掘#网络运维# 脚本编写番外篇-小练习

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。 

目录

 一、用shell写一个计算器

二、用Sheel定义一个求n的阶乘函数

拓展:


 一、用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)!