shell练习题
一、编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息。
原文代码为:
Shell
|
1
2
3
4
5
6
7
8
9
10
|
#!/bin/bash
if ! grep "^#!" $1 &>/dev/null; then
cat >> $1 << EOF
#!/bin/bash
# Author:
#Date & Time: `date +"%F %T"`
#Description:
EOF
fi
vim +5 $1
|
初学者看到这代码,可能不太会用,其实很简单,看到有$1,就表示需要带参数来执行,所以,这个脚本的执行方法是:
①、将以上代码保存为shell脚本,比如test,
②、使用chmod加上执行权限,chmod +x test
③、执行 ./test newfile 即可看到效果。
Ps:当然也可以不要第②步,直接使用 sh test newfile 即可。
执行效果如下:

这个脚本对于经常写shell的童鞋就很有用,但是忘记带参数执行就会卡住不动,而且不带路径的话就直接在当前目录下生成新文件,会很乱。所以张戈就将其改进一下,变得更加易用:
Shell
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/bash
if [[ -z "$1" ]];then
newfile=~/newscript_`date +%m%d_%S`
else
newfile=$1
fi
if ! grep "^#!" $newfile &>/dev/null; then
cat >> $newfile << EOF
#!/bin/bash
# Author: Inert Your Name here.
#Date & Time: `date +"%F %T"`
#Description: Please Edit here.
EOF
fi
vim +5 $newfile
|
改进说明:如果未带参数执行,将在家目录下生成带时间戳的新文件,避免重复及乱的问题。可将这个脚本改名后直接丢到path路径中,比如/bin/addjb 那么你的系统就多了一个命令 addjb了,是不是很有趣呢!
时间有限,以下脚本暂时就不做测试、解释或改进了,请先自行测试吧!有空再来更新。
二、任意三个整数,判断最大数。
Shell
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/bin/bash
echo "please enter three number:"
read -p "the first number is :" n1
read -p "the second number is:" n2
read -p "the third number is:" n3
let MAX=$n1
if [ $n2 -ge $n1 ]; then
MAX=$n2
fi
if [ $n3 -ge $MAX ]; then
MAX=$n3
fi
echo "the max number is $MAX."
|
执行效果:

注:非常简单的逻辑判断脚本,有兴趣的可以改进下,练练手。
三、求100以内偶数的和。
方法①:
Shell
|
1
2
3
4
5
6
|
#!/bin/bash
sum=0
for I in {1..50}; do
sum=$(($sum+2*$I))
done
echo "the sum is $sum"
|
方法②:
Shell
|
1
2
3
4
5
6
7
8
|
#!/bin/bash
let SUM=0
for I in $(seq 1 100); do
if [ $[$I%2] == 0 ]; then
let SUM+=$I
fi
done
echo "the sum is $SUM."
|
四、利用for语句ping C类网、ping B类网。
①、ping C类网:
Shell
|
1
2
3
4
5
6
7
8
9
|
#!/bin/bash
read -p "C NETWORK:" MYNET
PINGNET=`echo $MYNET | sed 's/\([0-9.]*\)\ .[0-9]*/\1/g'`
let I=1
while [ $I -le 254 ];do
ping –c1 –W1 $PINGNET.$I &>/dev/null
[ $? -eq 0 ] && echo "$PINGNET.$I online." || echo "$PINGNET.$I offline."
let I++
done
|
②、ping B类网:
Shell
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/bash
read -p "B network:" MYNET
PINGNET=`echo $MYNET | sed 's/\([0-9]\{1,3\}\.[0-9]\{1,3\}\)\..*/\1/g'`
for P in {0..255}; do
for I in {1..255}; do
if ping -c1 -W2 $PINGNET.$P.$I &>/dev/null; then
echo "$PINGNET.$P.$I is online."
else
echo "$PINGNET.$P.$I is offline."
fi
done
done
|
五、提示输入一个用户名,判断用户是否存在,如果存在,显示一下用户默认的shell。
Shell
|
1
2
3
4
5
6
7
8
9
|
#!bin/bash
read –p "please input a username:" USER
if cut –d:-f1 /etc/passwd | grep "^$USER$" &> /dev/null ;then
MYBASH=`grep "^$USER:" /etc/passwd | cut –d : -f7`
echo "${USER}'s shell is $MYBASH"
else
echo "$USER not exists."
exit 4
fi
|
六、监控系统登录人数,超过四个,显示已经达到四个,5S检查一下,并退出脚本(exit)
Shell
|
1
2
3
4
5
6
7
8
9
|
#! /bin/bash
read –p "A user:" MYUSER
cut –d : -f1 /etc/passwd | grep "^$MYUSER" &> /dev/null || exit 6
let COUNT=`who | grep "^$MYUSER" | wc –l`
until [ $COUNT –ge 4 ]; do
sleep 5
let COUNT=`who | grep “^$MYUSER” | wc -l`
done
echo "$MYUSER loged 4 times."
|
shell练习题的更多相关文章
- 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 练习题
1.编写脚本/bin/per.sh,判断当前用户对指定参数文件,是否不可读并且不可写 read -p "Please Input A File: " file if [ ! -e ...
- shell 练习题1
1.实现每次打开一个xx.sh时,自动添加注释信息 [root@chengyinwu ~]# cat .vimrc set ignorecase set nu set autoindent autoc ...
- 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 ...
随机推荐
- java.lang.IllegalArgumentException: Page directive: invalid value for import
我的项目原来用的tomcat版本是apache-tomcat-7.0.53,后来为了安全原因将版本升至\apache-tomcat-7.0.57,发现有的jsp页面出现下面的异常: java.lang ...
- 使用情况查询top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. top - 01:06:48 up 1:22, 1 ...
- 字符串匹配的KMP算法(如何实现还需静下心来细看)
第一部分:KMP算法的理解(转:http://kb.cnblogs.com/page/176818/) 字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB AB ...
- 【严蔚敏】【数据结构题集(C语言版)】1.16 自大至小依次输出读入的三个整数X,Y,Z
#include <stdio.h> #include<stdlib.h> int main() { int x,y,z,temp; scanf("%d%d%d&qu ...
- Codeforces Round #278 (Div. 1) D - Conveyor Belts 分块+dp
D - Conveyor Belts 思路:分块dp, 对于修改将对应的块再dp一次. #include<bits/stdc++.h> #define LL long long #defi ...
- 五 Python基础 数据类型和变量
数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...
- php中max_input_vars默认值为1000导致多表单提交失败
公司内一个php的后台管理系统,之前运行在apache上,后来我给转到nginx+php上后,其他功能运行正常,有一个修改功能提交表单后没有提交成功,查了代码没查出来什么问题,后来看了下php err ...
- 在内网环境使用WPAD/PAC和JS攻击win10
转:https://mp.weixin.qq.com/s/qoEZE8lBbFZikKzRTwgdsw 在内网环境使用WPAD/PAC和JS攻击win10 2018-03-01 wangrin 看雪学 ...
- 洛谷P3168 [CQOI2015]任务查询系统 [主席树,差分]
题目传送门 任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任 ...
- python 写一个贪吃蛇游戏
#!usr/bin/python #-*- coding:utf-8 -*- import random import curses s = curses.initscr() curses.curs_ ...