一、编写一个脚本使我们在写一个脚本时自动生成”#!/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练习题的更多相关文章

  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 练习题

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

  7. shell 练习题1

    1.实现每次打开一个xx.sh时,自动添加注释信息 [root@chengyinwu ~]# cat .vimrc set ignorecase set nu set autoindent autoc ...

  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. PHP解决并发问题的几种实现

    对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了 在PHP语言中并没有原生的提供并发的解决方案,因此就需要借助其他方式来实现并发控制. 方案一:使用文件锁排它锁 f ...

  2. HDU 3085 Nightmare Ⅱ(双向BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3085 题目大意:给你一张n*m地图上,上面有有 ‘. ’:路 ‘X':墙 ’Z':鬼,每秒移动2步,可 ...

  3. LightOJ - 1297 Largest Box LightOJ(一元三次方程求极大值)

    题目链接:https://vjudge.net/contest/28079#problem/K 题目大意:给你一个长为L,宽为W的纸片,四个角剪掉边长为x的正方形,如下图所示,然后折成一个无盖的纸盒, ...

  4. ios测试apk

    最近apk在ios上面测试总是会遇到奇奇怪怪的问题,现在是两个项目要集成在一个apk中所以将两个项目运行之后都是编译成了.a文件,然后在两个.a文件中都设置了两个意义相同变量名相同的全局变量(标识当前 ...

  5. asyncio的简单了解

    asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持. asyncio的编程模型就是一个消息循环.我们从asyncio模块中直接获取一个EventLoop的引用,然后把需要 ...

  6. 用js 的for循环打印三角形,提取水仙花数,求本月多少天

    第一题:用for循环打印三角形 //第一个 for(var x = 1;x <= 4;x++){ //控制行数 :由 1 到 4 for(var y = 1;y <= x;y++){ // ...

  7. PhpStorm函数注释的设置

    首先,PhpStorm中文件.类.函数等注释的设置在:setting->Editor->FIle and Code Template->Includes下设置即可,其中方法的默认是这 ...

  8. javascript copy text to clipboard

    本段代码摘自微软docs网站上,目前需要解决在IE浏览器中触发copy事件的方法,也可以直接调用jquery. <!DOCTYPE html> <html> <head& ...

  9. eclipse maven 配置

    http://www.cnblogs.com/little-YTMM/p/5970878.html

  10. thinkphp5.0生命周期

    本篇内容我们对ThinkPHP5.0的应用请求的生命周期做大致的介绍,以便于开发者了解整个执行流程. 1.入口文件 用户发起的请求都会经过应用的入口文件,通常是 public/index.php文件. ...