• shell 练习题1


    1.实现每次打开一个xx.sh时,自动添加注释信息

    [root@chengyinwu ~]# cat .vimrc 
    set ignorecase
    set nu
    set autoindent
    autocmd BufNewFile *.sh exec ":call SetTitle()"
    func SetTitle()
    if expand("%:e") == 'sh'
    call setline(1,"#!/bin/bash")
    call setline(2,"#********************************************************************")
    call setline(3,"#Author:baozexu")
    call setline(4,"#QQ: 2897374243")
    call setline(5,"#Date: ".strftime("%Y-%m-%d"))
    call setline(6,"#FileName: ".expand("%"))
    call setline(8,"#Description: ")
    call setline(9,"#********************************************************************")
    call setline(10,"")
    endif
    endfunc
    autocmd BufNewFile * normal G
    

    需求1:通过位置传参方式, 创建 Linux 系统账户及密码,执行 var1.sh username password,控制最多传递两个参数

    [root@manager tmp]# cat var1.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var1.sh
    #Description: 
    
    if [ $# -ne 2 ];then
    	echo "USAGE: $0 请传递两个参数: [username | password] "
    exit
    fi
    
    useradd $1
    echo "$2" | passwd --stdin "$1"
    

    需求1:使用read模拟Linux登陆页面。

    	1.先实现, 无论多low
    ​	2.在进行改进
    [root@manager tmp]# cat var2.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var2.sh
    #Description: 
    
    
    echo $(hostnamectl |awk -F ": " '/Operating/ {print $2}')
    
    echo "kernel $(uname -r) on an $(uname -m)"
    
    read -p "$(hostname) login:" user
    read -s -t3 -p "Password:" pw
    
    echo "你输入的用户名为:$user   密码为:$pw"
    	
    

    需求2:使用 read编写一个备份脚本,需要用户传递2个参数,源和目标。

    [root@manager tmp]# cat var3.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var3.sh
    #Description: 
    
    read -p "请输入你要备份的源文件或目录:" Dest
    read -p "请输入你要备份的目标位置:" Path
    
    echo "你要备份的源文件为: $Dest"
    echo "你要备份的目标位置为:$Path"
    
    read -p "你确定要备份吗? [yes | no ]" Action
    if [ $Action == "yes" ];then
    	cp -rpv $Dest $Path
    fi
    

    需求3:使用read编写一个探测主机存活脚本,需要用户传递测试的IP地址。

    [root@manager tmp]# cat var4.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var4.sh
    #Description: 
    
    read -p "请输入探测主机的ip地址:" ip
    
    ping -W1 -c1 $ip &> /dev/null
    
    if [ $? -eq 0 ];then
    	echo "$ip is ok"
    else
    	echo "$ip is error"
    fi
    

    需求4:使用read编写一个修改系统主机名称脚本。

    1.打印当前的主机名称
    	2.提示用户输入新的主机名称
    	3.询问用户是否修改?
    	4.确定修改,执行修改命令
    	5.不确定修改,退出脚本
    [root@manager tmp]# cat var5.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var5.sh
    #Description: 
    
    echo "当前的主机名为: $(hostname)"
    
    read -p "请输入新的主机名:" new_host
    read -p "是否将$(hostname) 修改为${new_host} [yes | no ]" Action
    
    if [ $Action == "yes" ];then
    	hostname $new_host
    	hostnamectl set-hostname $new_host
    	echo "你的主机名称已修改为  ${new_host} "
    	
    fi
    

    需求1:如何替换 $PATH 中的/bin/替换为/BIN/

    [root@manager tmp]# echo ${PATH//bin/BIN}
    /usr/local/sBIN:/usr/local/BIN:/usr/sBIN:/usr/BIN:/root/BIN
    

    需求2:变量string=“Bigdata process is Hadoop, Hadoop is open source project”,执行脚本后,打印输出string变量,并给出用户以下选项:

    1)、打印string长度
    2)、删除字符串中所有的Hadoop
    3)、替换第一个Hadoop为Linux
    4)、替换全部Hadoop为Linux
    用户输入数字1|2|3|4,可以执行对应项的功能
    
    [root@manager tmp]# cat var6.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var6.sh
    #Description: 
    
    string="Bigdata process is Hadoop, Hadoop is open source project"
    
    echo "1)、打印string长度"
    echo "2)、删除字符串中所有的Hadoop"
    echo "3)、替换第一个Hadoop为Linux"
    echo "4)、替换全部Hadoop为Linux"
    until [ $Action == q  ] 2> /dev/null
    
    do read -p "请输入对应的选项:[ 1| 2| 3| 4| ]" Action
    
    if [ $Action == "1" ];then
    	echo "${#string}"
    
    elif [ $Action == "2" ]; then
    	echo "${string//Hadoop/}"
    
    elif [ $Action == "3" ]; then
    	echo "${string/Hadoop/Linux}"
    
    elif [ $Action == "4" ]; then
    	echo "${string//Hadoop/Linux}"
    fi
    done
    

    需求3:查看内存/当前使用状态,如果使用率超过80%则报警发邮件,思路如下:

    	1.当前内存使用百分比是多少
    ​	2.进行判断比对  
    ​		如果大于80%  则触发邮件
    ​		否则,over
    ​		已使用的内存  /  总内存  * 100 = 使用的百分比
    [root@manager tmp]# cat var7.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var7.sh
    #Description: 
    
    
    used=$(free -m |awk '/Mem/ {print $3/$2*100}')
    
    if [ ${used%.*} -ge 10 ];then
    	echo "你的内存超过了80%,目前内存的使用率为:$used"
    fi
    

    需求1:根据系统时间,打印今年和明年时间。

    [root@manager tmp]# cat var8.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var8.sh
    #Description: 
    
    echo "今年的时间为:$(date +%Y)"
    echo "明年的时间为: $(($(date +%Y)+1))"
    

    需求2:根据系统时间获取今年还剩下多少星期,已经过了多少星期。思路如下:

    	[date +%j  已经过了多少天]()
    
    一年有365天   已经过了 301 = 还剩下   365-301 = 64  / 7 = 还剩下多少周
    			  已经过了 301 天 / 7 = 已经过了多少周
    [root@manager tmp]# cat var9.sh
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var9.sh
    #Description: 
    
    echo "今年已经过了$(date +%j) 天"
    echo "今年已经过了$[$(date +%j)/7] 周"
    echo "今年还剩下$[365-$(date +%j)/7] 周"
    echo "从现在距离下一年还剩下$[365-$(date +%j)] 天"
    
    

    需求3:完成一个计算器功能: 传入2个值,然后对传入的值进行 加 减 乘 除,思路如下:

    	1.使用read让用户传值:     $1 $2
    ​	2.对传入的值进行运算:
    ​	3.输出对应的结果.
    ​		
    [root@manager tmp]# cat var10.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var10.sh
    #Description: 
    
    echo "$1+$2 = $[$1 + $2]"
    echo "$1-$2 = $[$1 - $2]"
    echo "$1*$2 = $[$1 * $2]"
    echo "$1/$2 = $[$1 / $2]"
    

    1 查看系统当前有几个登陆的用户

    [root@chengyinwu ~/variables]# cat var07.sh 
    #!/bin/bash
    #********************************************************************
    #Author: baozexu
    #QQ: 991540698
    #Date: 2019-10-28
    #FileName: var07.sh
    #Description: 
    #********************************************************************
    
    #List=w |awk '/up/ {print $6}'
    echo "当前系统登录了$(w |awk '/up/ {print $6}') 个用户 "
    

    2 筛选出当前系统存在的僵尸进程

    [root@manager opt]# cat test2.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: test2.sh
    #Description: 
    
    Zombie=$(ps aux |grep 'Z'|egrep -v 'VSZ|grep')
    echo "僵尸进程的个数为:$(ps aux |grep 'Z'|egrep -v 'VSZ|grep' |wc -l)个"
    echo "当前系统的僵尸进程为:
    $Zombie"
    

    3 查看当前系统已使用内存的百分比

    [root@manager tmp]# cat var7.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var7.sh
    #Description: 
    
    
    used=$(free -m |awk '/Mem/ {print $3/$2*100}')
    
    if [ ${used%.*} -ge 10 ];then
    	echo "你的内存超过了80%,目前内存的使用率为:$used"
    

    4 查看当前系统已使用磁盘的百分比

    df -h|awk '/40G/ {print $(NF-1)}'
    

    5 通过位置变量创建 Linux 系统账户及密码

    [root@manager tmp]# cat var1.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var1.sh
    #Description: 
    
    if [ $# -ne 2 ];then
    	echo "USAGE: $0 请传递两个参数: [username | password] "
    exit
    fi
    
    useradd $1
    echo "$2" | passwd --stdin "$1"
    

    6 统计Nginx日志中每个IP的访问量有多少,日志如下:

    192.168.56.1 - - [21/May/2018:20:44:06 -0400] "GET /index.html HTTP/1.0" 404 169 "-" "ApacheBench/2.3" "-"/code/index.html`
    
    awk '{print $1}' access.log |sort  |uniq -c|sort -nr
    

    7 写个shell,看看你的linux系统中是否有自定义用户(普通用户),若是有,一共有几个?

    [root@manager variables]# cat var12.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var12.sh
    #Description: 
    
    user=$(ls /home |wc -l)
    echo "你的linux系统中有${user}个普通用户"
    

    8 编写一个脚本,计算100以内所有能被3整除数字的和

    [root@manager variables]# cat var13.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var13.sh
    #Description: 
    
    sum=0
    for i in {1..100};do
    	if [ $[$i%3] -eq 0 ];then
    	sum=$[$i+$sum]
    
    fi
    done
    echo "sum:$sum"
    

    9 输入两个整数计算这两个整数的相加,相减,相乘,相除,求余的结果

    [root@manager variables]# cat var14.sh 
    #!/bin/bash
    #Date: 2019-10-28
    #FileName: var14.sh
    #Description: 
    
    read -p "请输入两个整数:" n1 n2
    expr $n1 + 1 > /dev/null 2>&1
    [ $? -ne 0 ] && echo "请输入两个整数" && exit
    expr $n2 + 1 > /dev/null 2>&1
    [ $? -ne 0 ]&& echo "请输入两个整数" && exit
    echo "$n1+$n2=`awk "BEGIN{print $n1+$n2}"` "
    echo "$n1-$n2=`awk "BEGIN{print $n1-$n2}"` "
    echo "$n1*$n2=`awk "BEGIN{print $n1*$n2}"` "
    echo "$n1/$n2=`awk "BEGIN{print $n1/$n2}"` "
    

    10 取出当前系统日期、时间、当前有几个登陆用户、过去15分钟的平均负载、当前可用内存大小、当前系统空闲

    时间,输入到/tmp/txt.csv
    [root@chengyinwu ~/variables]# cat var09.sh 
    #!/bin/bash
    #********************************************************************
    #Author: baozexu
    #QQ: 991540698
    #Date: 2019-10-28
    #FileName: var09.sh
    #Description: 
    #********************************************************************
    
    echo "当前的系统日期为:$(date)">/tmp/txt.csv
    echo "当前有$(w |awk '/up/ {print $7}')个登录用户">>/tmp/txt.csv
    echo "过去15分钟的平均负载为:$(w|awk '/load average/ {print $NF}')">>/tmp/txt.csv
    echo "当前系统可用的内存大小为:$(free -m|awk '/Mem/ {print $4}')">>/tmp/txt.csv
  • 相关阅读:
    vue向组件传递数据
    微信会员卡,开卡组件开发遇到总汇
    siteserver安装向导完成后,显示System.Web.UI.page render System.ArgumentNullException
    spring mvc中的valid
    django 命名空间详解
    spring MVC 如何查找URL对应的处理类
    【HDU 2010】水仙花数
    【CSU 1079】树上的查询
    【Poj 1330】Nearest Common Ancestors
    【Dairy】2016.10.20 生日记
  • 原文地址:https://www.cnblogs.com/baozexu/p/11787995.html
Copyright © 2020-2023  润新知