shell脚本练习

1、通过 read 命令获取用户输入的表达式,表达式的格式设定为 操作数1 运算符 操作数2 ,例如 5 + 3 ,然后利用设计的脚本输出运算结果。 要求:实现 加、减、乘、除运算

#!/bin/bash
#读取用户输入的表达式
read -p "请输入表达式:" expression
#使用expr命令计算表达式的值
result=$(echo "$expression" |bc)
#输出运算结果
echo "运算结果为:$result"

2、定义一个计算n的阶乘的函数(含参函数、if判断、for循环) 写一个脚本去调用求阶乘的函数,并定义一个变量 n 可用read交互输入,最终输出 n的阶乘 结果

#!/bin/bash

# 定义阶乘函数
factorial() {
    local n=$1
    local fact=1

    # 使用for循环计算阶乘
    for (( i=2; i<=n; i++ )); do
        fact=$((fact * i))
    done

    # 返回阶乘结果
    echo $fact
}

# 提示用户输入一个整数
read -p "请输入一个整数n来计算n的阶乘:" n

# 检查输入是否为正整数
if ! [[ "$n" =~ ^[0-9]+$ ]]; then
    echo "错误:输入不是一个正整数。"
    exit 1
fi

# 调用阶乘函数并输出结果
result=$(factorial$n)
echo "$n的阶乘结果是:$result"

3、写⼀个Shell脚本去筛选出ens33⽹卡的ipv4地址,并赋值⼀个变量输出

将上⾯的脚本编辑到计划任务中,并将echo输出内容重定向到⼀个固定⽂件中,计划时间随意⼀天⼀次也可 以

#!/bin/bash

# 获取ens33网卡的IPv4地址,tr -s ' '将匹的空格并将重复的压缩为一个,cut -d ' '截取已空格隔开的第3个字符
ipv4_address=$(ifconfig ens33 | grep netmask |tr -s ' '|cut -d ' ' -f3)

# 检查是否成功获取到IPv4地址
if [ -z "$ipv4_address" ]; then
    echo "未找到ens33网卡的IPv4地址"
    exit 1
fi

# 输出IPv4地址
echo "ens33网卡的IPv4地址是:$ipv4_address"

将上面的脚本保存到一个文件中,例如get_ipv4.sh,然后在终端中赋予执行权限:

chmod +x get_ipv4.sh

将这个脚本编辑到计划任务中,并重定向输出到一个固定文件中。首先,打开crontab进行编辑:

crontab -e

然后,添加以下行到crontab文件中,这里设置为每天执行一次,假设在每天的凌晨1点执行:

0 1 * * * /path/get_ipv4.sh >> /path/output_file.txt

问题:如果脚本单独执行没有问题,放到定时任务中执行失败

4、解决方法:

1、在脚本中添加系统环境变量

#!/bin/bash
source /etc/profile  # 加载系统环境变量(加上这一行)

2、或着直接在crontab中引入环境变量

0 1 * * * . /etc/profile;/path/get_ipv4.sh >> /path/output_file.txt

原因:crontab与环境变量 cron并不知道脚本执行时所需要的特殊环境,所以你要保证在shell脚本中提供所有必要的路径和环境变量。

脚本中涉及文件路径时写全局路径或执行脚本前先cd进入指定目录。 脚本执行要用到python、java或其他环境变量时,通过source命令引入环境变量。 当手动执行脚本没有问题,但是crontab无法执行时,这时首先要考虑环境变量的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值