shell 编程练习题1

需求1:使用root用户清空/var/log/messages日志,并每次执行保留最近100行

? 1.必须是root用户

? 2.需要保留最后100行


[[email protected] if]# cat if-19.sh
#!/bin/bash

Author:      Oldux.com QQ: 552408925

Date:       2019-10-30

FileName:   if-19.sh

URL:         https://www.xuliangwei.com

Description: 

Log_Path=/var/log/messages

#如果是普通用户则拒绝
if [ $UID -ne 0 ];then
    echo "Permission denied...."
    exit 1
fi

if [ -f $Log_Path ];then
    #先提取100行的内容写入新的文件
    tail -100 $Log_Path >/var/log/messages_bak

#将新的文件重新写入到/var/log/messages中
cat /var/log/messages_bak > $Log_Path

#最后删除文件
rm -f /var/log/messages_bak

#输出结果
echo "clean log done...."

else
    echo "$Log_Path No such file or directory"
    exit 2

fi

需求2:判断httpd服务是否正常启动, 脚本名必须为httpd_deamon.sh

    1.手动如何看这个服务是正常的
?       1.ps
?       2.losf netstat
?       3.curl  200 301 302
?       4.systemctl

systemctl status httpd &>/dev/null
if [ $? -eq 0 ];then
    echo "httpd is ok...."
else
    systemctl start httpd &>/dev/null
    if [ $? -eq 0 ];then
        echo "Httpd 重新启动ok"
    else
        echo "httpd 重新启动失败"
    fi
fi

----------------------------------------------------------------

Description: 

Httpd_status=$(ps aux|grep httpd | grep -v grep |wc -l)

if [ $Httpd_status -ge 1 ];then
    echo "httpd service is ok"
else
    systemctl start httpd &>/dev/null
    if [ $? -eq 0 ];then
        echo "重新拉起成功"
    else
        echo "重新拉起失败"
    fi
fi

--------------------------------------------------------

Description: 

Httpd_Status=$(curl -sI  localhost | awk '/HTTP/ {print $2}')

if [[ "$Httpd_Status" -eq 200  ||  "$Httpd_Status" -eq 301  ||  "$Httpd_Status" -eq 302 ]];then
    echo "Httpd is ok ...."
else
    echo "Httpd is down...."
    echo "尝试复活中......."
    sleep 3
    systemctl start httpd &>/dev/null
    if [ $? -eq 0 ];then
        echo "复活成功"
    else
        echo "复活失败"
    fi
fi

需求3:根据不同的系统版本,配置不同的yum源

? 1.获取相同系统,不同的版本
? 2.根据不同系统的不同版本实现
? 1.判断是centos还是ubuntu
? 2.根据判断的条件进入嵌套if
? 3.根据不同的系统配置不同yum源

[[email protected] if]# cat if-23.sh
#!/bin/bash

Author:      Oldux.com QQ: 552408925

Date:       2019-10-30

FileName:   if-23.sh

URL:         https://www.xuliangwei.com

Description: 

system_status=$(cat /etc/redhat-release  | awk '{print $(NF-1)}')

if [ ${system_status%%.} -eq 7 ];then
    echo "systemctl 7"
elif [ ${system_status%%.} -eq 6 ];then
    echo "systemctl 6"
fi

需求4:安装不同版本的PHP方式,使用echo输出即可,不用真的安装。

? 1.给一个选择的菜单
? 2.给一个数字编号 1 2 3 4
? 3.根据用户的选择进行判断
?

[[email protected] if]# cat if-24.sh
#!/bin/bash

Author:      Oldux.com QQ: 552408925

Date:       2019-10-30

FileName:   if-24.sh

URL:         https://www.xuliangwei.com

Description: 

clear

cat <<EOF

1) Installed PHP 5.5
2) Installed PHP 7.0
3) Installed PHP 7.3 

4) quit

EOF
read -p "请输入你要安装的版本 [ 1 | 2 | 3 | 4 ] " Action

#判断空值
if [ -z $Action ];then
    echo "请不要输出空值"
    exit 1
fi

#必须是数字
if [[ ! $Action =~ ^[0-9]+$ ]];then
    echo "仅支持数字"
    exit 1
fi

if [ ${#Action} -ne 1 ];then
    echo "仅支持一位数字"
    exit 1
fi

#判断
if [ $Action -eq 1 ];then
    echo "1) Installed PHP 5.5"
elif [ $Action -eq 2 ];then
    echo "2) Installed PHP 7.0"

elif [ $Action -eq 3 ];then
    echo "3) Installed PHP 7.3"

else
    exit 1
fi

需求5:

1.如果姑娘小于18岁,打印“未成年”
2.如果姑娘大于18岁小于25岁,打印“表白”
3.如果姑娘大于25岁小于45岁,打印“阿姨好”。
4.如果姑娘大于45岁,打印“奶奶好”

read -p "请输入你的年龄" girl
 11 if [ $girl -lt 18 ];then
 12 echo "未成年"
 13 elif [ $girl -ge 18 -a $girl -lt  25 ];then
 14 echo "表白"
 15 elif [ $girl -ge 25 -a $girl -lt  45 ];then
 16 echo "阿姨好"
 17 elif [ $girl -gt 45 ];then
 18 echo "奶奶好"
 19 fi

需求6:写一个脚本,提示用户输入身高,如果身高达到180以上全票,120以下免票,其余不能进。

? 1.需要交互
? 2.判断 超过180
? 3.判断 低于120
? 4.其他 over
?

[[email protected] if]# cat if-25.sh
#!/bin/bash

Author:      Oldux.com QQ: 552408925

Date:       2019-10-30

FileName:   if-25.sh

URL:         https://www.xuliangwei.com

Description: 

read -p "请输入你的身高: " Action

if [ $Action -ge 180 ];then
    echo "全票"
else
    if [ $Action -lt 120 ];then
        echo "免票"
    else
        echo "over"
        exit
    fi
fi

需求7:判断一个机器是否存活,能ping通就算存活。

 10 read -p "请输入你的ip地址" new_ip
 11 ping -W1 -c1 -t3 $new_ip &>/dev/null
 12 if [ $? -eq 0 ];then
 13 echo "你的机器已存活"
 14 else
 15 echo "你的机器没有存活"
 16 fi

需求8:写一个Nginx安装脚本,加入判断,当上一步执行成功在执行下一步,否则退出脚本

1.网络
2.源
3.安装
4.判断

[[email protected] if]# cat if-26.sh
#!/bin/bash

Author:      Oldux.com QQ: 552408925

Date:       2019-10-30

FileName:   if-26.sh

URL:         https://www.xuliangwei.com

Description: 

#1.网络
ping -W1 -c1 www.baidu.com &>/dev/null
if [ $? -ne 0 ];then
    echo "网络存在故障...."
    exit 1
fi

#2.源  记得要判断系统
if [ -f /etc/yum.repos.d/epel.repo ];then
    if [ -s /etc/yum.repos.d/epel.repo ];then
        echo "yum repos skip ...."
    else
        echo "epel 为空  wget ..."
        #wget ....
    fi
else
    echo "epel文件不存在"
    #wget .......
fi

#3.安装
rpm -q nginx &>/dev/null
rc=$?

if [ $rc -eq 0 ];then
    echo "nginx已安装"
else
    yum install nginx -y
fi

需求9:在每月第一天备份并压缩/etc目录的所有内容,存放到/opt/bak目录,存放的形式

2019_04_10_etc.tar.gz,脚本名称为fileback,存放在/root的家目录下。

1.备份什么  /etc
2.备份到哪  /root/bak
3.备份周期  每月1号 crond

[[email protected] if]# cat if-27.sh
#!/bin/bash

Author:      Oldux.com QQ: 552408925

Date:       2019-10-30

FileName:   if-27.sh

URL:         https://www.xuliangwei.com

Description: 

Dest_Dir=/opt/bak
Date=$(date +%F)
#准备存放的目录
if [ ! -d $Dest_Dir ];then
    mkdir -p $Dest_Dir
fi

#打包并将内容存放置备份的目录
cd / && tar czf $Dest_Dir/etc_${Date}.tar.gz etc 

#判断是否ok
if [ ! -f $Dest_Dir/etc_${Date}.tar.gz ];then
    echo "备份失败>......"
fi

需求10.监控内存小于500M和磁盘容量小于10G,则发邮件报警

? 1.剩余内存低于500M free -m |awk ‘/^Mem/ {print \(NF}'** ? **2.剩余磁盘低于10G df -h|awk '/\/\)/ {print $(NF-2)}‘
?

[[email protected] if]# cat if-28.sh
#!/bin/bash

Author:      Oldux.com QQ: 552408925

Date:       2019-10-30

FileName:   if-28.sh

URL:         https://www.xuliangwei.com

Description: 

Free=$(free -m |awk '/^Mem/ {print $NF}')
Disk=$(df -h|awk '/\/$/ {print $(NF-2)}')

if [ $Free -lt 500 -a ${Disk%G} -lt 10 ];then
    echo "报警......"
else
    echo "目前一切良好"
    echo "内存是: ${Free}M   磁盘是: $Disk"
fi

需求11.检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员

[[email protected] if]# cat  if-29.sh
#!/bin/bash

Author:      Oldux.com QQ: 552408925

Date:       2019-10-30

FileName:   if-29.sh

URL:         https://www.xuliangwei.com

Description: 

if [ $UID -eq 0 ];then
    yum install vsftpd -y
else
    echo "你不是管理员>.."
    exit
fi

3.输入三个数并进行升序排序
[[email protected] if]# cat if-30.sh
#!/bin/bash

Author:      Oldux.com QQ: 552408925

Date:       2019-10-30

FileName:   if-30.sh

URL:         https://www.xuliangwei.com

Description: 

if [ $# -ne 3 ];then
    echo "请传递三个参数"
    exit
fi
echo "$1 $2 $3" | xargs -n1 | sort -n

需求15.提示用户输入年份后判断该年是否为闰年 能整除4, 并且不能被100整除则为 闰年

1.传递年份 2012 2013
2.用年份除以4
在用年份除以100
如果有余数 则是润年
如果没有 则是平年

[[email protected] if]# cat if-32.sh
#!/bin/bash

Author:      Oldux.com QQ: 552408925

Date:       2019-10-30

FileName:   if-32.sh

URL:         https://www.xuliangwei.com

Description: 

read -p "请输入你想检测的年份: " Action
#1.先除以4
rn=$(( ${Action} % 4 ))
rn_2=$(( ${Action} % 100 ))
rn_3=$(( ${Action} % 400 ))

#1.判断是否能被400整除
if [ $rn_3 -eq 0 ];then
    echo "$Action 为闰年"
    exit
else
    #2.没有被400整除的, 先除以4
    if [ $rn -eq 0 ];then
        #3.成立,在除以100,有余数则润
        if [ $rn_2 -ne 0 ];then
            echo "$Action 为闰年"
            exit
        fi
    fi
fi

?   echo "$Action 为平年"
第二种方法
read -p "请输入年份: " Y
if [ $[$Y%4] -eq 0 -a $[$Y%100] -ne 0 ] || [ $[$Y%400] -eq 0 ];then
   echo "$Y 是闰年"
else
   echo "$Y 是平年

需求16.根据用户输入密码位数,生成随机密码(包含数字、大小写字母、特殊符号)

[[email protected] if]# cat if-31.sh
#!/bin/bash

Author:      Oldux.com QQ: 552408925

Date:       2019-10-30

FileName:   if-31.sh

URL:         https://www.xuliangwei.com

Description: 

read -p "请输入你想生成的随机数密码位数: " Action
#控制回车

#控制必须是数字

if [ $Action -ge 7  -a $Action -lt 20 ];then
    mkpasswd -l $Action
else
    echo "复杂度密码必须7位以上"
fi

原文地址:https://www.cnblogs.com/baozexu/p/11764163.html

时间: 2024-10-11 05:35:08

shell 编程练习题1的相关文章

四、shell编程练习题(1-20)

1.写一个脚本 脚本可以接受一个以上的文件路径作为参数: 显示每个文件所拥的行数: 显示本次共对多少个文件执行了行数统计. #!/bin/bash for file in $*; do   lines=`wc -l $file | cut -d' ' -f1`   echo "$file has $lines lines." done echo "$# files." 运行结果: [[email protected] test]# sh 1.sh /etc/init

Shell编程进阶篇(完结)

1.1 for循环语句 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或是循环变数.这使得for循环能够知道在迭代过程中的执行顺序. 1.1.1 shell中的for循环 shell中的for 循环与在c中不同,它包含三种形式:第一种结构是列表for 循环;第二种结构就是不带列表的for循环:第三种就类似于C语言. ①   列表for循环(常用) #!/bin/bash

Shell编程(3)

1. shell流程控制 2. for语句 3. while语句 4. break和continue语句 5. case语句 6. shell编程高级实战 shell流程控制 流程控制是改变程序运行顺序的指令.linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case).下面我将通过例子介绍下,各个语句使用方法 if语句 格式: 格式:if list; then list; [ elif list; then list; ] ..

【免费下载】全套最新 3.Shell编程 视频教程+教学资料+学习课件+源代码+软件开发工具

3.Shell编程视频教程 网盘地址: 链接:https://pan.baidu.com/s/1-M4wHTMaE8rxjroTTd-9qQ 提取码:qf52 加公众号 获取更多新教程 教程目录大纲 ./3.Shell编程 ├── 11 云计算-Linux系统管理-shell基础 │?? ├── 100 -云计算-Linux系统管理-shell基础-echo命令.avi │?? ├── 101 -云计算-Linux系统管理-shell基础-脚本执行方法.avi │?? ├── 102 -云计算-

老男孩新书Shell编程实战预定开始了-包邮包答疑

老男孩新书Shell编程实战预定开始了(扫图中二维码购买包邮定期包答疑),亲爱的伙伴们,让你们久等了.电脑用户猛戳 电脑购买链接 注意:包邮包3个月(2017春节后起算)Q群书籍内容答疑,等于白送书,还倒搭答疑服务. 如果觉得给力,请帮忙朋友圈.QQ群.空间转载! 活动优惠仅限本次活动,从其他渠道购买不享受此次的服务承诺. 定价 89元 基本信息 作者: 老男孩 丛书名: Linux/Unix技术丛书 出版社: 机械工业出版社 ISBN:9787111556077 上架时间:2017-1-6 出

shell编程中for,while,util,case,select,break, continue用法详解

关于shell脚本的更多详细实例讲解请参考:http://www.cnblogs.com/yuexiaxiaoxi/category/646749.html Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for.while和until.while循环和for循环属于"当型循环",而until属于"直到型循环".循环控制符:break和continue控制流程转向. 参考:<Linux 与unix shell 编程指

shell编程(七)--- sed的用法

sed:称为流编辑器,也称为行编辑器. sed处理过程:sed读取源文件中的一行,并将其放在临时缓冲区中,这个缓冲区称为模式空间,使用相应的模式对模式空间进行处理,并将处理的结果显示到屏幕上,并不会影响源文件,处理结束后,将模式空间中的内容显示至屏幕. sed格式: sed [options] 'AddressCommand' file ... options: -n:静默模式,不显示模式空间中的内容,默认显示默认空间中的内容.常和p命令一起使用. -i:直接修改源文件的内容. -e 'Addr

shell编程基础必知

shell编程 ################################################ 静态语言 动态语言 ################################################ 编程语言:机器语言,汇编语言,高级语言 ################################################ 面向对象的编程语言:sehll c 面向对象的编程语言:JAVA Python perl c++ ################

shell编程详解(一)

shell编程 语言分为: 编译型语言:先要事先转换成可执行格式 解释型语言:边解释边执行 变量:shell是弱类型编程语言,变量不需要先指明类型及初始化,而是由上下文决定类型 bash变量类型: 环境变量 本地变量 位置变量 特俗变量 本地变量:作用域为整个bash进程 VARNAME=value 局部变量:作用域当前代码 local VARNAME=value 环境变量:作用域为当前shell进程及子进程 export VARNAME=value 条件判断 hash中如何实现条件判断? 条件