实验五 shell脚本编程

项目 内容
这个作业属于哪个课程 Linux系统与应用
这个作业的要求在哪里 作业要求
学号-姓名 17041403-刘杨
作业学习目标 1.了解shell脚本的概念及使用 2.掌握shell脚本语言的基本语法 3.学习简单的shell脚本编程

1.让用户输入一个字符串,如果用户输入的是 hello ,请输入 hello 用户姓名首字母缩写 ,否则输出 请输入hello

方法1

#!/bin/bash       #此脚本使用/bin/bash来解释执行 #!是一个特殊的表示符,其后跟着解释此脚本的shell路径
read -p '请输入一个字符串:' str #用read命令定义交互式变量str,-p后面跟提示信息,即在输入前打印提示信息
if [ $str = "hello" ]        #条件判断
then
    echo "hello ly"          #echo命令输出字符串
else
    echo "请输入hello"
fi                           #if语句要以fi结束(每一个if都要对应一个fi)


方法2

#!/bin/bash       
if [ $1 = "hello" ] #与方法1的区别:没有使用交互式变量而是直接用$1即给shell脚本传的第1个参数与hello比较
then
    echo "hello ly"    
else
    echo "请输入hello"
fi                  


方法3

#!/bin/bash
read -p '请输入一个字符串:' str
[ "$str"= 'hello' ] && echo "ly" || echo '请输入hello'   #此时条件判断用逻辑运算符实现


2.编写一脚本,判断输入用户名是否存在,输出结果只能是存在该用户或者不存在该用户,不能有其 他数据输出。

方法1

#!/bin/bash
read -p '请输入用户名:' user_name    #交互式变量user_name
id $user_name &> /dev/null   #id命令显示用户user_name的信息,将输出重定向到/dev/null中即不输出结果
if [ $? -eq 0 ]                     #$?获取最后命令的退出状态,0表示没有错误 eq表示相等
then
    echo "存在用户$user_name"        #$?为0时表明存在该用户
else
    echo "不存在用户$user_name"      #$?不为0时表明不存在该用户
fi


方法2

#!/bin/bash
read -p '请输入用户名:' user_name 
grep -w $user_name /etc/passwd &> /dev/null #用grep查看输入参数是否在/etc/passwd中-w表示精确查找
if [ $? -eq 0 ]                   
then
    echo "存在用户$user_name"     
else
    echo "不存在用户$user_name"  
fi


3.编写脚本计算1-100之间的所有奇数和

#!/bin/bash

SUM=0                                #定义变量SUM存奇数和并赋初值

for i in {1..100..2}                 #i从1开始,每次循环加2,直到i大于100 ..表连续
do
let SUM=$SUM+$i                      #奇数相加
done                                 #for/do/done循环结构

echo "1-100之间的所有奇数和为: $SUM"   #输出奇数和


4.编写脚本,判断键盘输入整数是否为质数。

#!/bin/bash

read -p '请输入一个正整数:' num                       #定义交互式变量num
[ $num -eq 1 ] && echo '$num是质数' && exit          #若输入为1则输出1为质数并退出程序
[ $num -eq 2 ] && echo '$num是质数' && exit          #若输入为2则输出2为质数并退出程序
for i in `seq 2 $[$num-1]`                           #seq命令生成从2—(num-1)的整数
do
   [ $[$num%i] -eq 0 ] && echo "$num不是质数"&&exit  #若num可被1和它本身以外的数整除则说明不为质数
done
echo "$num是质数" && exit                            #否则输出num为质数并退出


5.模拟一个多任务维护界面,当执行程序时先显示总菜单,然后进行选择后做相应的维护监控操作。

#!/bin/bash
cat <<- EOF                          #获取stdin,并在EOF处结束stdin,输出stdout - 使分界符(EOF)所在行的开头部分的制表符(Tab)被去除。即输入完成后,在一个新的一行输入EOF结束stdin的输入时,EOF不必顶行写
    h    显示命令帮助
    f    显示磁盘分区
    d    显示磁盘挂载
    m    查看内存使用
    u    查看系统负载
    q    退出程序
EOF                     
while true
do
    read -p "请选择需要操作的内容(help h):" action   #变量action用于选择功能
    case $action in            
       h)                 #caes语句格式
            cat <<- EOF
                h    显示命令帮助
                f    显示磁盘分区
                d    显示磁盘挂载
                m    查看内存使用
                u    查看系统负载
                q    退出程序
             EOF
             ;;            #caes语句格式
       f)
            lsblk          #显示磁盘分区,也可用 fdisk -l 
            ;;
       d)
            df -h          #显示磁盘挂载
            ;;
       m)
            free -m        #查看内存使用
            ;;
       u)
            uptime         #查看系统负载
            ;;
       q)
            exit           #退出程序
            ;;
    esac                   #case in /esac结构用于多分支选择
done                       #while/do/done循环结构









6.编写脚本实现计算用户输入参数数字的和,分别用 shift 和 for 循环实现。

#!/bin/bash
SUM=0                  #定义变量SUM存和并初始化为0
while [ $# -ne 0 ]     # $#为传递到脚本的参数个数 -ne为不等于
do
     let SUM=$SUM+$1   #当传递到脚本的参数个数不为0时SUM+第1位参数值
     shift             #将位置参数左移,默认移1位
done                   #while/do/done循环结构
echo SUM=$SUM          #输出最后和


#!/bin/bash
SUM=0                   #定义变量SUM存和并初始化为0
for i           
do
     let SUM=$SUM+$i    #for循环将所有参数相加求和
done
echo SUM=$SUM


7.编写脚本,生成一个phonenumber.txt文件,文件内容为随机产生以139开头的手机号1000个, 每个手机号占一行。

#!/bin/bash
file=./phonenumber.txt              #建立文本文件phonenumber存储手机号
for(( i=1; i<=1000; i++ ))          #循环1000次产生1000个手机号
do
     n1=$[ $RANDOM%10 ]             #用RANDOM函数产生0-9的随机数字
     n2=$[ $RANDOM%10 ]             #产生n~m范围内的随机数使用$RANDOM取余m-n+1,之后加上n
     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    #输出以139开头的11位手机号给./phoneenumber文件
done


8.在第7题产生的1000个电话号码中抽取5位幸运号码,并显示,要求只显示前3三位数字和后4位数 字,中间四位用*代替。

#!/bin/bash
phone=./phonenumber.txt                  #把phonenumber.txt文件地址给phone
for (( i=1; i<=5; i++))                  #5次循环取5个号码
do
    line=`wc -l $phone | cut -d ' ' -f1` #wc -l为统计文件行数(0开始数)-d用来定义分隔符,此时为空格 -f1表示取第1个字段 本行命令目的是只显示行数
    luck_line=$[ $RANDOM%$line+1]        #随机选中1个幸运行号    
    luck_number=`head -$luck_line $phone | tail -1` #取幸运行号对应号码作为幸运号码并返回最后一行
    echo "139****${luck_number:7:4}"     #7为幸运号码的第7位(0开始数) 4为往后再数4位 输出的是139****+幸运号码第8-11位数
    echo $luck_number >> luck.txt        #将幸运号码写入luck.txt文件中
    sed -i "/$luck_number/d" $phone      #将phonenumber.txt文件中已被抽取的幸运号码删除
done


9.使用 until 语句批量创建10个用户,要求 stu1-stu5 用户的 UID 分别为 2001-2005 , stu6stu10 用户的家目录分别在 /rhome/stu6-/rhome/stu10

#!/bin/bash

if [ -d /rhome ]     #判断rhome目录是否已存在,若存在则为真
then
    echo "/rhome 已经存在"
else
    mkdir /rhome     #不存在则新建rhome目录
    echo "/rhome 不存在,创建成功"  
fi
i=1                  #定义循环变量i并赋值为1
until [ $i -gt 5 ]   #i大于5则跳出循环,即对stu1-stu5操作
do
    useradd -u $[2000+$i] stu$i && echo "stu$i:123" | chpasswd #useradd命令用来建立用户帐号和 创建用户的起始目录(使用权限是超级用户) -u指定UID chpasswd命令对用户名为stu1-stu5设置密码123
    let i++      
done
until [ $i -gt 10 ]  #i大于10则跳出循环,即对stu6-stu10操作
do
    useradd -d /rhome/stu$i stu$i && echo "stu$i:123" | chpasswd #-d指定用户登入时的主目录,对用户名为stu6-stu10设置密码123
    let i++
done



10.编写脚本收集用户输入的基本信息(姓名,性别,年龄),如果用户不输入一直提示用户输入, 后根据用户输入的信息输出相应的内容。

#!/bin/bash
input_fun(){
    input_var=" "  #定义输入变量input_var为空
    output_var=$1  #定义输出变量output_var为第1个参数值
    while [ -z $input_var ]  #-z判断变量的值是否为空(为空时一直循环)
    do
          read -p "$output_var" input_var #提示输入 input_var为交互式变量
    done
    echo $input_var     #函数调用时分别将输入值input_var给name sex age    
}

name=`input_fun 请输入你的姓名:` #调用函数input_fun,用户输入姓名进行传参
sex=`input_fun 请输入你的性别:`  #调用函数input_fun,用户输入性别进行传参
age=`input_fun 请输入你的年龄:`  #调用函数input_fun,用户输入年龄进行传参

echo "你的姓名是 $name"         #输出姓名
echo "你的性别是 $sex"          #输出性别
echo "你的年龄是 $age"          #输出年龄


posted @ 2020-04-15 19:13  肉松饼小王子  阅读(762)  评论(0)    收藏  举报