实验五 shell脚本编程
项目 |
内容 |
|
这个作业属于哪个课程 |
|
|
这个作业的要求在哪里 |
|
|
学号-姓名 |
17041417-李嘉麒 |
|
作业学习目标 |
1、了解 2、掌握 3、学习简单的 |
实验内容
到exp5目录下

1、让用户输入一个字符串,如果用户输入的是hello,请输入hello 用户姓名首字母缩写,否则输出请输入hello。
read -p 'please input a string: ' str #显示提示信息,并获得输入的字符串存入str中
if [$str ="hello"] #条件判断,输入的内容str是否等于hello
then
echo "hello li jia qi" #是,输出欢迎信息
else
echo "please input 'hello' " #否,输出提示信息
fi

结果示意图

2、编写一脚本,判断输入用户名是否存在,输出结果只能是存在该用户或者不存在该用户,不能有其他数据输出。
read -p 'please input username : ' user_name #显示提示信息,并获得输入的用户名存入user_name中 id $user_name &> /dev/null #查找user_name用户,并将输出结果重定向至/dev/null废弃,不显示任何结果 if [$? -eq 0] #查看上一个命令运行后退出状态是否成功 then echo 'The user exist: $user_name ' #是,找到了指定用户名,输出提示信息 else echo 'The user dose not exist:$user_name' #否,没找到了指定用户名,输出提示信息 fi

结果示意图

3、编写脚本计算1-100之间的所有奇数和。
sum=0 #定义变量
for i in {1..100..2} #循环变量i遍历数组:100以内的奇数
do
let $sum=$sum+$i #将所有奇数累加
done
echo "The result : $sum #输出累加结果

结果示意图

4、编写脚本,判断键盘输入整数是否为质数。
read -p 'please input a positive integer: ' num
#显示提示信息,并将输入的数,存入num
[$num -eq 1] && echo '$num is prime number ' && exit
[$num -eq 2] && echo '$num is prime number ' && exit
#将num与1,2比较,只要是1,或是2这两个特殊的数,直接显示是质数并退出
for i in `seq 2 $[ $num-1]`
#不为1,2,循环变量i遍历序列:从2一直递增至num-1,步长为1
do
[$[ $num%i] -eq 0 ] && echo "$num is not prime number" && exit
#若存在num可被i整除,为质数,显示是质数并退出
done
echo "$num is a prime number" && exit
#若不满足之前的所有条件,则为质数,并显示信息

结果示意图

5、模拟一个多任务维护界面,当执行程序时先显示总菜单,然后进行选择后做相应的维护监控操作
cat <<-EOF #显示信息,直到下一个EOF结果
h display command help
f display disk partition
d display disk mount
m view memory usage
u view system load
q esc program
EOF
while true #死循环
do
read -p 'please select what you want to do (help h):' action
#显示提示信息,并将选择的字母赋给action
case $action in
#以action的值,分情况执行
h) #若为h,显示提示信息
cat <<-EOF
h display command help
f display disk partition
d display disk mount
m view memory usage
u view system load
q esc program
EOF
;;
f) #若为f,显示磁盘分区
lsblk
;;
d) #若为d,显示磁盘挂数
df -h
;;
m) #若为m,查看内存使用
free -m
;;
u) #若为u,查看系统负载
uptime
;;
q) #若为q,退出程序
exit
;;
esac
done

结果示意图

6、编写脚本实现计算用户输入参数数字的和,分别用shift和for循环实现。
#shift版本
sum=0 #定义变量sum暂存结果
while [ $# -ne 0] #若命令行参数个数不为0,继续循环
do
let sum=$sum+$1 #将$1D的值加入sum中
shift #将位置参数左移一位,如当前是$1,移位后是$2
done
echo sum=$sum #输出结果

结果示意图

---------------------------------------------------------------------------------------------------------
#for版本
sum=0 #定义变量sum暂存结果
for i #循环变量i遍历所有参数
do
let sum=$sum+$i #将所有参数求和
done
echo sum=$sum #输出结果

结果示意图

7、编写脚本,生成一个phonenumber.txt文件,文件内容为随机产生以139开头的手机号1000个,每个手机号占一行。
file=./phonenumber.txt
#定义文件指针file指向phonenumber.txt文件
for ((i=1;i<=1000;i++))
#循环1000次
do
N1=$[ $RANDOM%10]
N2=$[ $RANDOM%10]
N3=$[ $RANDOM%10]
N4=$[ $RANDOM%10]
N5=$[ $RANDOM%10]
N6=$[ $RANDOM%10]
N7=$[ $RANDOM%10]
N8=$[ $RANDOM%10]
#随机生成从0-9的数,生成8个
echo "139$N1$N2$N3$N4$N5$N6$N7$N8" >>$file
#重定向将电话号码写入file中
done

结果示意图

8、在第7题产生的1000个电话号码中抽取5位幸运号码,并显示,要求只显示前3三位数字和后4位数字,中间四位用*代替。
phone=./phonenumber.txt
#定义文件指针phone指向文件phonenumber.txt
for ((i=1;i<=5;i++))
#循环5次
do
line=`wc -l $phone | cut -d' ' -f1`
#查找总行数
luck_line=$[ $RANDOM%$ine+1]
#随机获得一行数
luck_number=`head -$luck_line $phone | tail -1`
#获取该行数信息
echo "139****${luck_number:7:4}"
#显示提取的号码信息,只显示最后四位
echo $luck_number >> luck.txt
#将得到的号码存入luck.txt中
sed -i "/$luck_number/d" $phone
#在删除原文件中删除该号码
done

结果示意图


9、使用until语句批量创建10个用户,要求stu1-stu5用户的UID分别为2001-2005,stu6-stu10用户的家目录分别在/rhome/stu6-/rhome/stu10。
if [ -d /rhome] #判断rhome目录是否存在
then
#是,显示提示信息
echo "/rhome directory already exists"
else
#否,创建目录,显示提示信息
mkdir /rhome
echo "/rhome inexistence,created successfully"
fi
i=1 #变量i
until [ $i -gt 5] #循环1-5次
do
useradd stu$i -u $[2000+$i] && echo 123 | passwd --stdin stu$i
#第1-5个用户的UID从2001-2005,
let i++
done
until [ $i -gt 10]
do
useradd stu$i -d /rhome/stu$i && echo 123 | passwd --stdin stu$i
#设置第6-10个用户的家目录
let i++
done

结果示意图


10、编写脚本收集用户输入的基本信息(姓名,性别,年龄),如果用户不输入一直提示用户输入,最后根据用户输入的信息输出相应的内容。
input_fun(){
input_var="" #存放用户输入内容
output_var=$1 #传递询问内容参数
while[ -z $input_var ] #当输入内容为空时循环
do
read -p "$output_var" input_var
#显示询问参数,并将输入内容保存到input_var
done
echo $input_var #输出输入内容
}
#调用三次函数
name=`input_fun,please_input_your_name:`
gender=`input_fun,please_input_your_gender:`
age=`input_fun,please_input_your_age:`
#显示结果
echo "your name:$name"
echo "your gender:$sex"
echo "your age:$age"

结果示意图


浙公网安备 33010602011771号