项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2020春季Linux系统与应用(南昌航空大学 - 信息工程学院) |
这个作业的要求在哪里 | 作业链接,点这里啦! |
学号-姓名 | 17041517-漆京 |
作业学习目标 | 1,了解shell脚本的概念及使用 2,掌握shell脚本语言的基本语法 3,学习简单的shell脚本编程 |
位置参数变量 | 作 用 |
---|---|
$n | n 为数字,$0代表命令本身,\(1\)-\(9\)代表1-9参数,十及十以上参数用大括号${10} |
$* | 这个变量代表命令行中所有的参数,把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过$@把每个参数区别对待 |
$# | 这个变量代表命令行中所有参数的个数 |
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"\(1\),\(2\)…\(n\)" |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与\(*相同,但是使用时加引号,并在引号中返回每个参数。 如"\)$@"用「"」括起来的情况、以"\(1\)","\(2\)"… "\(n\)" 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同 |
$? | 显示最后命令的退出状态,0表示没有错误,其他任何值表明有错误。 |
1,让用户输入一个字符串,如果用户输入的是 hello ,请输入 hello 用户姓名首字母缩写 ,否则输出
请输入hello
Method 1:
#!/bin/bash
read -p '请输入一个字符串:' str
if [ $str = "hello" ]
then
echo "hello crystal"
else
echo "请输入hello"
fi
Method 2:
#!/bin/bash
read -p '请输入一个字符串:' str
[ $str = "hello" ]&&echo 'hello crystal' ||echo "请输入hello"
2, 编写一脚本,判断输入用户名是否存在,输出结果只能是存在该用户或者不存在该用户,不能有其
他数据输出。
Method 1:
#!/bin/bash
read -p '请输入用户名:' user_name
id $user_name &> /dev/null
if [ $? -eq 0 ]
then
echo "存在用户$user_name"
else
echo "不存在用户$user_name"
fi
Method 2:
#!/bin/bash
read -p '请输入用户名:' user_name
grep -w $user_name /etc/passwd &>/dev/null
if [ $? -eq 0 ]
then
echo "存在用户$user_name"
else
echo "不存在用户$user_name"
fi
3, 编写脚本计算1-100之间的所有奇数和
#!/bin/bash
SUM=0
for i in {1..100..2}
do
let SUM=$SUM+$i
done
echo "1-100之间的所有奇数和为: $SUM"
4, 编写脚本,判断键盘输入整数是否为质数。
#!/bin/bash
read -p '请输入一个正整数:' num
[ $num -eq 1 ] && echo '$num是质数'&&exit
[ $num -eq 2 ] && echo '$num是质数'&&exit
for i in `seq 2 $[$num-1]`
do
[ $[$num%i] -eq 0 ] && echo "$num不是质数"&&exit
done
echo "$num是质数"&&exit
5, 模拟一个多任务维护界面,当执行程序时先显示总菜单,然后进行选择后做相应的维护监控操作。
#!/bin/bash
cat <<-EOF
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
EOF
while true
do
read -p "请选择需要操作的内容(help h):" action
case $action in
h)
cat <<-EOF
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
EOF
;;
f)
lsblk
;;
d)
df -h
;;
m)
free -m
;;
u)
uptime
;;
q)
exit
;;
esac
done
6,编写脚本实现计算用户输入参数数字的和,分别用 shift 和 for 循环实现。
#!/bin/bash
SUM=0
while [ $# -ne 0 ]
do
let SUM=$SUM+$1
shift
done
echo SUM=$SUM
#!/bin/bash
SUM=0
for i
do
let SUM=SUM+$i
done
echo SUM=$SUM
7, 编写脚本,生成一个phonenumber.txt文件,文件内容为随机产生以139开头的手机号1000个,
每个手机号占一行。
#!/bin/bash
file=./phonenumber.txt
for ((i=1;i<=1000;i++))
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]
echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> $file
done
8,在第7题产生的1000个电话号码中抽取5位幸运号码,并显示,要求只显示前3三位数字和后4位数
字,中间四位用*代替。
#!/bin/bash
phone=./phonenumber.txt
for ((i=1;i<=5;i++))
do
line=`wc -l $phone | cut -d' ' -f1`
luck_line=$[RANDOM%$line+1]
luck_number=`head -$luck_line $phone | tail -1`
echo "139****${luck_number:7:4}"
echo $luck_number >> luck.txt
sed -i "/$luck_number/d" $phone
done
9, 使用 until 语句批量创建10个用户,要求 stu1-stu5 用户的 UID 分别为 2001-2005 , stu6-
stu10 用户的家目录分别在 /rhome/stu6-/rhome/stu10
#!/bin/bash
if [ -d /rhome ]
then
echo "/rhome目录已存在"
else
mkdir /rhome
echo "/rhome不存在,已创建成功"
fi
i=1
until [ $i -gt 5 ]
do
useradd stu$i -u $[2000+$i] && echo "stu$i:123" | chpasswd && echo "stu$i创建成功"
let i++
done
until [ $i -gt 10 ]
do
useradd stu$i -d /rhome/stu$i && echo "stu$i:123" | chpasswd && echo "stu$i创建成功"
let i++
done
for i in {1..10};do userdel -r stu$i;done #删除所创建的用户
10, 编写脚本收集用户输入的基本信息(姓名,性别,年龄),如果用户不输入一直提示用户输入,最
后根据用户输入的信息输出相应的内容。
#!/bin/bash
input_fun(){
input_var=""
output_var=$1
while [ -z $input_var ]
do
read -p "$output_var" input_var
done
echo $input_var
}
name=`input_fun 请输入你的姓名:`
sex=`input_fun 请输入你的性别:`
age=`input_fun 请输入你的年龄:`
echo "你的姓名是$name"
echo "你的性别是$sex"
echo "你的年龄是$age"