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无法执行时,这时首先要考虑环境变量的问题。