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
shell 练习题1的更多相关文章
- shell 脚本之 shell 练习题汇总
整理了一些 shell 相关的练习题,记录到这里. 1. 请按照这样的日期格式 xxxx-xx-xx 每日生成一个文件,例如:今天生成的文件为 2013-09-23.log, 并且把磁盘的使用情况写到 ...
- shell练习题5
需求如下: 用shell实现,把一个文件文档中只有一个数字的行给打印出来.(以/password文件为例,自行修改) 参考解答如下 方法1 #!/bin/bash file_name=passwd n ...
- shell练习题4
需求如下: 系统logrotate工具,可以完成日志切割.归档.写一个shell脚本实现类似功能. 举例:假如服务的输出日志是1.log,要求每天归档一个,1.log第二天就变成1.log.1, 第三 ...
- shell练习题2
需求如下: 写一个shell脚本,检查指定的shell脚本是否有语法错误,若有错误,首先显示错误信息,然后提示用户输入q或Q退出脚本, 输入其他内容则直接用vim打开该shell脚本. 参考解答如下 ...
- shell练习题1
需求如下: 写一个shell脚本,把10.0.1.0/24网段在线的ip列出来. 参考解答如下 方法1 #!/bin/bash ip="10.0.1." for i in $(se ...
- shell练习题
一.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. 原文代码为: Shell 1 2 3 4 5 6 7 8 9 10 #!/bin/bash ...
- shell 练习题
1.编写脚本/bin/per.sh,判断当前用户对指定参数文件,是否不可读并且不可写 read -p "Please Input A File: " file if [ ! -e ...
- shell练习题7
需求如下: 输入一串随机数字,然后按千分位输出. 例如:输入随机数字为"123456789",输出为123,456,789 参考解答如下 -方法1 [root@lanquark s ...
- shell练习题6
需求如下: 有日志access.log,部分内容如下: 127.0.0.1 - - [03/Jul/2018:00:00:01 +0800] "GET / HTTP/1.1" 20 ...
随机推荐
- ASP.NET页面缓冲
整页缓存<% OutPutCache Duration=5 VaryByParam="none" %>Duration是缓冲时间 参数可以有多个 在varyByPara ...
- PAT 1007 Maximum Subsequence Sum 最大连续子序列和
Given a sequence of K integers { N1, N2, …, NK }. A continuous subsequence is defined to be { Ni, Ni ...
- java高并发系列【共34篇,强力建议观看】
第1天:必须知道的几个概念 第2天:并发级别 第3天:有关并行的两个重要定律 第4天:JMM相关的一些概念 第5天:深入理解进程和线程 第6天:线程的基本操作 第7天:volatile与Java内存模 ...
- ES6新语法(一)
1.常量 ES5没有定义声明常量的方式,ES6标准中引入了新的关键字const来定义常量. 常量必须给初始值: 常量不能在同一作用域内重新定义或赋值: <scr ...
- FCC---Use the CSS Transform scale Property to Change the Size of an Element
To change the scale of an element, CSS has the transform property, along with its scale() function. ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之四:组织单位服务安装账号设置
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 大话Git系列之初识版本控制系统(1)
前言:何谓版本控制系统呐?有两种说法:一种叫法为SCM,==source code management (源代码管理系统)另一种说法为VCS,==version control system(版本控 ...
- Gradle之FTP文件下载
Gradle之FTP文件下载 1.背景 项目上需要使用本地web,所以我们直接将web直接放入assets资源文件夹下.但是随着开发进行web包越来越大:所以我们想着从版本库里面去掉web将其忽略掉, ...
- Spring Boot 2 构建可部署的war包
默认情况下Spring Boot使用了内嵌的Tomcat服务器,项目最终被打成jar包运行,每个jar包可以被看作一个独立的Web服务器.传统的Web开发,一般会将Web应用打成一个war包,然后将其 ...
- 个人的一点小愚见,java有什么优点和缺点
java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的.可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏. j ...