for循环

 

    格式:

                  for VAR in LIST; do

                                  STATEMENT1

                                    ...

                              Done

    VAR:变量名

     LIST:列表 可直接给出 如:{1 2 3 4 }

                或者{start..end} 如:{1..10}

                或者$@  列出向脚本传递的位置变量

                或者使用命令引用 `seq 1 2 9` 起始值为1 步长为2 最大为9 的值

    

举例:输出1-10十个数字

        shell 脚本编程 一些知识点_shell脚本


C风格格式:

          for (( 变量赋值;循环条件;修正表达式 ));do

           STATEMENT1

                                  ...

           done

举例:输出1-10中的偶数

        shell 脚本编程 一些知识点_shell脚本_02





 条件测试

 

格式:        test Expression

             [ Expression ]

             ` Expression `

             COMMAND  命令的退出状态码,命令执行成功结果为真否则为假

 

   Expression:测试表达式 可以是整数测试、字符串测试、文件测试等。

 

   整数测试:

符号用法含义(英文注释)结果
-gtA–gt BAgreat than BA大于B则为真否则为假
-geA–ge BAgreat than or equal BA大于等于B则为真否则为假
-eqA –eqBAequal BA等于B则为真否则为假
-ltA–lt BAless than BA小于B则为真否则为假
-leA–le BAless than or equal BA小于等于B则为真否则为假
-neA–ne BAnot equal BA不等于B则为真否则为假

 

 字符串测试:

符号用法结果
>A>BA大于B则为真否则为假
<A<BA小于B则为真否则为假
===A=BA==BA等于B则为真否则为假
>=A>=BA大于等于B则为真否则为假
<=A<=BA小于等于B则为真否则为假
!=A!=BA不等于B则为真否则为假
=~“$A”=~ PATTERN变量A字串能与PATTERN匹配则为真否则为假
-z-zA判断A是否为空,空为真,不空为假
-n-nA判断A是否非空,非空为真,空为假
<=A<=BA小于等于B则为真否则为假



文件测试:

-e/path/to/somefile判断某文件是否存在,存在为真,否则为假
-f/path/to/somefile判断文件存在且为普通文件则为真,否则为假
-d/path/to/somefile判断文件存在且为目录文件则为真,否则为假
-h /path/to/somefile判断文件存在且为符号链接文件则为真,否则为假
-b/path/to/somefile判断文件存在且为块设备文件则为真,否则为假
-c/path/to/somefile判断文件存在且为字符设备文件则为真,否则为假
-S/path/to/somefile判断文件存在且为套接字文件则为真,否则为假
-P/path/to/somefile判断文件存在且为管道文件则为真,否则为假
-r/path/to/somefile判断当前用户对此文件有读权限有则为真,否则为假
-w/path/to/somefile判断当前用户对此文件有写权限有则为真,否则为假
-x/path/to/somefile判断当前用户对此文件有执行权限有则为真,否则为假
-u/path/to/somefile判断文件是否拥有suid权限有则为真,否则为假
-g/path/to/somefile判断文件是否拥有sgid权限有则为真,否则为假
-k/path/to/somefile判断文件是否拥有sticky权限有则为真,否则为假
-O/path/to/somefile判断当前用户是否为文件的属主是则为真,否则为假
-G/path/to/somefile判断当前用户是否属于文件的属组属于则为真,否则为假
-N/path/to/somefile判断文件自从上一次被读取之后,是否被修改过,修改过为真,否则为假
file1-nt file2文件f1是否比文件f2是则为真,否则为假
file1-ot file2文件f1是否比文件f2旧是则为真,否则为假
file1-ef file2f1f2是否为同一文件的硬链接是则为真否则为假

If语句

格式:

 

单分支:

                                     ifCONDITION-TRUE; then

                                               分支

                                     fi

 

                            双分支:

                                     ifCONDITION-TRUE; then

                                               分支1

                                     else

                                               分支2

                                     fi

 

                            多分支:

                                     if CONDITION1-TRUE; then

                                               分支1

                                     elifCONDITION2-TRUE; then

                                               分支2

                                     ...

                                     else

                                               分支n

                                     fi

 

 






举例:写一个脚本

         (1) 传递一个参数给脚本,此参数为用户名;

         (2) 如果用户存在,则执行如下任务

                   (a) 如果用户的id号小于500,显示其为管理员或系统用户;

                   (b) 否则,显示其为普通用户;

         (3) 如果用户不存在,则添加之;

shell 脚本编程 一些知识点_shell脚本_03

 

  case语句

    格式:

                            case变量引用  in

                            PATTERN1)

                                     分支1

                                     ;;

                            PATTERN2)

                                     分支2

                                     ;;

                            ...

                            *)

                                     分支n

                                     ;;

                            Esac

  

 PATTERN可使用通配符:

                                     *:任意长度的任意字符

                                     ?: 任意单个字符

                                     []:指定范围内的任意单个字符

                                     a|b: a或者b

 

交互式脚本

                   read [OPTIONS] [name ...]

                            -p"PROMPT"

                            -t #: 超时时长

 

                   给变量以默认值:

                            [ -z"$VAR" ] && VAR=VALUE

 

    举例:显示如下菜单给用户

                            cpu) show cpuinfomation;

                            mem) show memoryinfomation;

                            disk) show diskinfomation;

                            *) quit

                            提示用户键入选项:

                            (1) cpu: 显示CPU相关的信息

                            (2) mem: 显示内存相关的信息

                            (3) disk: 列出磁盘设备

                            (4) 其它任何信息,即为退出脚本

 

shell 脚本编程 一些知识点_shell脚本_04

  while循环

              

     格式:

while CONDITION; do

                              循环体

                              循环控制变量的修正表达式

                      done

 

                   CONDITION为“真”进入循环,直到“假”退出循环;

    

举例:计算100以内所有偶数之和

shell 脚本编程 一些知识点_shell脚本_05

  until循环

 

格式:

     until CONDITION; do

                            循环体

                            循环控制变量修正表达式

                   done

 

                   CONDITION为“假”时进入循环;为“真”退出循环;

 

  循环控制命令

    break:提前退出循环;

                            break[N]: 退出N层循环;N省略时表示退出break语句所在的循环;

         continue:提前结束本轮循环,而直接进入下轮循环;

                            continue[N]:提前第N层的循环的本轮循环,而直接进入下轮循环;

   

 举例:写一个脚本,判断给定的用户是否登录了当前系统;

                            (1)如果登录了,则脚本终止;

                            (2)5秒种,查看一次用户是否登录;

       shell 脚本编程 一些知识点_shell脚本_06