1. 编写shell脚本,计算1-100的和;



    #! /bin/bash

    # sum 1-100

    sum=0

    for i in `seq 1 100`;do

       sum=$[$sum+$i]

    done

    echo $sum


  2. 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;


         #! /bin/bash

         # 要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,         直到输入正确的数字为止

         i=0

        while [ $i -lt 1 ];do

        read -p "the number must be larger than 1:" i

        done

        sum=0

        for n in `seq 1  $i`;do

        sum=$[$sum+$n]

        done

        echo $sum


3. 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下;

#! /bin/bash

       ##把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下

       cd /root

       for i in `ls`;do

       if [ -d  $i ] ; then

       cp -r $i  /tmp/

       fi

       done


   4.编写shell脚本,批量建立用户user_00, user_01, ... user_100并且所有用户同属于users组;

#! /bin/bash

      #批量建立用户user_00, user_01, ... user_100并且所有用户同属于users组

      groupadd users

      for i in `seq 0 9`;do

      useradd -g users user_0$i

      done


       for j in `seq 10 100`;do

       useradd -g users user_$j

       done


    5.编写shell脚本,截取文件test.log中包含关键词 ‘abc’ 的行中的第一列(假设分隔符为 ”:” ),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;

#! /bin/bash

          #截取文件test.log中包含关键词 ‘abc’ 的行中的第一列(假设分隔符为 ”:” ),然后把>截取的数字排 序(假设第一列为数字),然后打印出重复次数超过10次的列

         awk -F ':' '$0~/abc/ {print $1}' test.log >/tmp/1.txt

         sort -n /tmp/1.txt |uniq -c |sort -n >/tmp/2.txt

         awk '$1>10 {print $2}' /tmp/2.txt



         6.编写shell脚本,判断输入的IP是否正确(IP的规则是,n1.n2.n3.n4,其中1<n1<255, 0<n2<255, 0<n3<255, 0<n4<255)。

#! /bin/bash

checkip() {

        if echo $1 |egrep -q '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' ; then
                a=`echo $1 | awk -F. '{print $1}'`
                b=`echo $1 | awk -F. '{print $2}'`
                c=`echo $1 | awk -F. '{print $3}'`
                d=`echo $1 | awk -F. '{print $4}'`

                for n in $a $b $c $d; do
                        if [ $n -ge 255 ] || [ $n -le 0 ]; then
                                echo "the number of the IP should less than 255 and greate than 0"
                                return 2
                        fi
                done
        else

                echo "The IP you input is something wrong, the format is like 192.168.100.1"
                return 1
        fi

}



rs=1
while [ $rs -gt 0 ]; do
    read -p  "Please input the ip:" ip
    checkip $ip
    rs=`echo $?`
done

echo "The IP is right!"



1. shell脚本中,怎么做可以把某一行给注释掉?
答:在行首加#


2. 如何执行一个shell脚本呢?
答:bash 1.sh   或chmod +x 1.sh ;./1.sh


3. 为了方便管理,我们约定把shell脚本都放到哪个目录下?

答:/sur/local/sbin/shell

4. 为了更好的调试shell脚本,我们可以加一个选项来观察shell脚本的执行过程,是哪个选项呢?
答:-x


5. 使用date命令打印5天前的日期,要求日期格式为: xxxx-xx-xx
答:date -d "5 days ago" +%Y-%m-%d  
      或者 date -d "-5 day" +%F


6. 请判断,阿铭的脚本哪里有问题?

  1. #! /bin/bash


  2. a = 1

  3. b = 2

  4. echo $a, $b


=两边不能有空格


7. shell脚本中如何使用数学运算?请举例说明。

答:eg  a=1;b=2;c=$[$a+$b]


8. shell脚本中有一个命令可以实现脚本和用户交互,请问是哪个命令,怎么使用?

答:read -p "xxxx:" n

这样会把用户输入的内容作为n这个变量的值


9. 在shell中如何进行大小或者等于判断?

答:if [ $a -gt 1 ] ;then ;fi  -lt -ge -le -eq -nu

gt 大于  lt 小于 ge 大于等于 le小于等于 eq 等于 nu 不等于


10. shell脚本中,用什么符号表示并且,用什么符号表示或者?

答:&& 表示并且  ||表示或者


11. shell脚本中,case逻辑判断的结构是什么样的?

答:

case  变量  in
value1)
          command
          ;;
value2)
          command
          ;;
value3)
          command
          ;;
*)
          command
          ;;
esac


12.  列举出shell脚本中常用的循环结构。

答:for循环

for 变量名 in 循环的条件;do
     command

done


while循环

while  条件; do
    command
done


13. shell脚本中函数的作用是什么?函数结构是什么样的?

答:

函数可以理解成shell脚本中一个小代码单元,当要用到这段代码时直接调用函数名即可,从而避免重复书写这段代码,提高代码书写效率和质量。
函数的结构为
function fu_name() {
.....

}


14. 写脚本实现,把一个目录下的所有文件(不含有目录)全部在文件名后面加一个.bak

         #! /bin/bash                                              

        for f in `ls`;do

            if [ -f $f ] ;then

               mv $f $f.bak

            fi

       done                                                                

或者

        #! /bin/bash          

        for f in `find . -type f`; do

        mv $f $f.bak;

        done

         


15. 编写一个shell脚本,将当前目录下大小大于100K的文件全部移动到/tmp/ 目录下。

     

               #! /bin/bash

               for f in `find . -type f -size +100K`;do

                                 mv $f   /tmp/

               done


16. 写一个小脚本,获取本机的HOSTNAME、IP地址以及DNS地址。

            #!/bin/bash
            hostname=`hostname`


            echo "hostname : " $hostname
            ip=`/sbin/ifconfig -a | grep 'inet addr' | awk -F ':' '{print $2}' | awk '{print $1}'`
            for i in $ip
                    do
            echo  "`ifconfig | grep -B1 "$i" | grep -v 'inet addr' | awk '{print $1}'` "$i""
           done


           DNS=`cat /etc/resolv.conf |grep nameserver|grep -v '#'`
           echo  $DNS


17. 写两个小脚本验证break和continue在循环中的作用。

#!  /bin/bash

for i in `seq 1 5`;do

 echo $i  

      if [ $i -eq 3 ];then

          continue

    fi

echo $i

done


#!  /bin/bash

for i in `seq 1 5`;do

 echo $i  

      if [ $i -eq 3 ];then

          break

    fi

echo $i

done