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

shell 练习题1的更多相关文章

  1. shell 脚本之 shell 练习题汇总

    整理了一些 shell 相关的练习题,记录到这里. 1. 请按照这样的日期格式 xxxx-xx-xx 每日生成一个文件,例如:今天生成的文件为 2013-09-23.log, 并且把磁盘的使用情况写到 ...

  2. shell练习题5

    需求如下: 用shell实现,把一个文件文档中只有一个数字的行给打印出来.(以/password文件为例,自行修改) 参考解答如下 方法1 #!/bin/bash file_name=passwd n ...

  3. shell练习题4

    需求如下: 系统logrotate工具,可以完成日志切割.归档.写一个shell脚本实现类似功能. 举例:假如服务的输出日志是1.log,要求每天归档一个,1.log第二天就变成1.log.1, 第三 ...

  4. shell练习题2

    需求如下: 写一个shell脚本,检查指定的shell脚本是否有语法错误,若有错误,首先显示错误信息,然后提示用户输入q或Q退出脚本, 输入其他内容则直接用vim打开该shell脚本. 参考解答如下 ...

  5. shell练习题1

    需求如下: 写一个shell脚本,把10.0.1.0/24网段在线的ip列出来. 参考解答如下 方法1 #!/bin/bash ip="10.0.1." for i in $(se ...

  6. shell练习题

    一.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. 原文代码为:         Shell   1 2 3 4 5 6 7 8 9 10 #!/bin/bash ...

  7. shell 练习题

    1.编写脚本/bin/per.sh,判断当前用户对指定参数文件,是否不可读并且不可写 read -p "Please Input A File: " file if [ ! -e ...

  8. shell练习题7

    需求如下: 输入一串随机数字,然后按千分位输出. 例如:输入随机数字为"123456789",输出为123,456,789 参考解答如下 -方法1 [root@lanquark s ...

  9. shell练习题6

    需求如下: 有日志access.log,部分内容如下: 127.0.0.1 - - [03/Jul/2018:00:00:01 +0800] "GET / HTTP/1.1" 20 ...

随机推荐

  1. VS2010到VS2019各个版本的密钥

    VS2019专业版和企业版的密钥 Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 Profe ...

  2. ASP.NET MVC教程一:ASP.NET MVC简介

    一.MVC模式简介 MVC模式是一种流行的Web应用架构技术,它被命名为模型-视图-控制器(Model-View-Controller).在分离应用程序内部的关注点方面,MVC是一种强大而简洁的方式, ...

  3. C# webclient progresschanged downlodfileCompleted

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. 爬虫模拟有道字典进行翻译,还发现了一条好玩的js

    08.14自我总结 爬虫模拟有道字典进行翻译 一.代码 import requests from lxml.html import etree # headers= { # 'User-Agent': ...

  5. 自学_DOM<五>

    类库DOM DOM(document object medol)文档对象模型. DOM就是HTML页面的模型,将每个标签都做为一个对象,JavaScript通过调用DOM中的属性.方法就可以对网页中的 ...

  6. 验证码无法正常显示,提示Could not initialize class sun.awt.X11GraphicsEnvironment

    在Web开发中使用验证码时可能遇到的问题:java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsE ...

  7. Cesium专栏-克里金插值(全国温度为例,附源码下载)

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

  8. numpy中array和matrix的区别

    两者相似但执行相同的运算可能得到不同的结果 显然,array只能通过dot()实现"矩阵乘法",array的"*"运算实现的是两个纬度相同的"矩阵&q ...

  9. andorid popupwindow 更新时动画的实现,可实现一个窗口被一个窗口推上去的效果

    最近由于项目需要,一直在寻找一个弹出窗口,在另一个弹出窗口弹出时,推上去的效果,居然找不到,经过不懈的努力,终于实现了popupwindow在更新时的动画. 先上代码: import android. ...

  10. いくnotepad++

    再见!Notepad++,好走不送! 1No zuo No Die 上周就发现Notepad++开发者在作妖,新版本放了个啥恶心的标注上来,本来想直接发文说一说,后来想想是不是这样又给它做了宣传,就决 ...