shell脚本博客02详解

Shell脚本02 详解

一,总结shell脚本用法

      1,两种命令激活脚本

           (1): sh

           (2): /bin/bash

      2,创建目录,在这个目录里创建shell脚本

             Mkdir –p /service/script

      3,以绝对路径来激活

         在/service/script目录下创建一个ctw.sh文件

         首先给ctw.sh 加X权限 chmod +x ctw.sh

         再用/service/script/ctw.sh 来激活脚本

      4,vim ctw.sh文件后内输入

          (1) #!/bin/bash

                   Useradd test1                :添加一个test1用户

                   Passwd echo “123456” | passwd –stdin test1

                   :给新添加的用户 test1设置密码 123456

           (2)怎么查看我新添加的用户呢?

                    Tail /etc/passwd  查看新添加的用户 

(tail尾部动态信息)

                    Tail /etc/shadow 查看密码设置

5,test 这个命令可以判断是目录还是文件

     #:test –d /root          

       :没反应                    

     #:echo $?                :→→→→查看上级是否成功

     # :0                          :→→→→0是成功 1是失败

                                         -d 是判断root是不是目录

                                       -f 是判断是不是文件

                                       -e判断目标是否存在

                                       -z 判断字符串是否是空

6,[ ] 中括号是开启判断条件。

     #:xx=44

     #: [ $xx == 44 ] $$ echo “0” || echo “1”

     判断中括号内xx是否等于44。$$(与)是就输出“0”否则输出1

7,应用在[] 中括号内的基本符号

     -gt 大于  -ge大于等于  ==等于  -lt小于  -le小于等于

     -ne不等于   -eq等于   !=不等于   -a 并且

     || 逻辑或(否则)      $$逻辑与

     Set nu 显示行号 (在vim中末尾使用)

二,交互输入

     1, read 让用户输入数据

       如:vim ctw.sh

           #!/bin/bash

           Read –p “请用户输入一个数字”

      2, 符号解释

            #: vim ctw.sh        →→→→  #:/service/script/ctw.sh 99 88

            #!/bin/bash

             echo $#               →→→→   2  :$#参数数量有99和88两个参数        

             echo $*                →→→→ 99 88 :$*罗列所有参数横排

             echo $0                →→→→ /service/script/ctw.sh  $0:路径

                                                取得脚本的本行路径

             echo $1                 →→→→ 99 :参数1      

             echo $2                 →→→→ 88 :参数2

3,求变量的位数

     #:xx=“123”                       #:xx=“123456”

     #:echo ${#xx} 回车               #:echo ${#xx} 回车 

       : 3                                         : 6

4,条件判断      单分支条件判断语句

      (1)  If (如果)   条件1(成立);then (那么)

                                   echo(动作1)

                 fi (结束)           有开始必须有结尾

       (2)exit 强制终止    elif 否则如果  -e识别\n换行符

        (3)#!/bin/bash

                 Read –p “请用户输入一个数字:  ”

                 If [ $ctw –eq 60 ];then

                             Echo “及格”

                 Elif [ $ctw –lt 60 ];then

                             Echo “不及格”

                 Elif [ $ctw –le 80 ];then

                             Echo “良”

                 Elif [ $ctw –lt 100 ];then

                             Echo “优”

                 Elif [ $ctw –eq 100 ];then

                             Echo “优秀”

                 Else

                             Echo “作弊”

                  Fi

(4)搭建yum仓库

        #!/bin/bash

        Umount /dev/sro               先卸载光盘(有没有都先卸)

        [ -d /media/cdrom ] || mkdir –p /media/cdrom

        查看有没有这个目录,没有就建一个

        Mount /dev/sro /media/cdrom   挂载光盘

        If [ $? -ne 0 ];then

                    Echo “请插入光盘”

                    Exit                        强制终止

        Fi

        [ -d /etc/yum.repos.d ] || mkdir –p /etc/yum.repos.d

        Cd /etc/yum.repos.d

        Mv * /tmp/

        cat > /etc/yum.repos.d/yum.repo <<FOF

        [local]

        name=local

        baseurl=file:///media/cdrom

        gpgcheck=0

        enabled=1

        FOF

        yum -y clean all

        yum makecache

        [ $? -eq 0 ] && echo "yum仓库搭建完毕" || echo ”缓存建立失败”

三, for和while 两种循环语句

       1, for 的三种取值

      (1)#!/bin/bash

              For I in 1 3 5 7 9                  in 取值范围

              Do                                       I 被符的值,1 3 5 7 9

                   d

         #: sh ctw.sh

            1

            3

            5

            7

            9

(2)for I in {1..10}              #: sh ctw.sh

        Do                                  1   

             Echo $I                      2

        Done                               :

                                              10

(3)for I in `ls /root | xargs`

        Do

                 Echo $I

        Done  (结束)

2,还有两种写法但不属于正则的shell语言

(1)c 语言的循环

        (()) 两个括号代表启动c语言

  For ((i=0; i<10; i++))      

  Do

               Echo $i

Done

(2) #!/bin/bash

          H=0

          For I in {1..10}

          Do

                    Echo $h

                    ((H++)) 或  let H++

          Done

(3)例题

         找出哪个网段是活的?

#!/bin/bash

For ip in 192.168.200.{1..254}

Do

             Ping –c 1 $ip                   :ping网段 –c 1 只ping一次

              If [ $? –eq 0 ] ;then

                          Echo “$ip活的”

              Fi

Done

3.while 循环

#!/bin/bash

Read –p “输入  “  I      :让用户输入I是几

While [ $I –lt 10 ]

Do

           Echo $I

           Let I++

Done

四, case

       Case完全可以用if来代表只是特殊请款下,写一个菜单或启动的服务脚本,用case是最合适的,看起来清晰简单。

#: vim ctw.sh

#!/bin/bash

Case  $1 in

                 Start)

                          Echo “开始服务”

                           ;;

                 Stop)

                          Echo “服务准备停止”

                           ;;

             Restart)

                          Echo “服务准备停止”

  Echo “服务开始启动”

;;

                           *)

                              Echo “请输入正确参数”

Esac  (总结尾)

详细解释:  $1 是变量也是参数1

                    In是取值 但在case里是对比 

                    怎么对比呢?

                    Start)  如果$1 是这个值start

                               那么 echo “服务开始启动” 就输出这句。

原文地址:https://www.cnblogs.com/changtianwei/p/9907715.html