shell编程

来源:互联网 发布:vip影院软件下载 编辑:程序博客网 时间:2024/06/04 23:28
1.shell脚本
   ****脚本的后缀”.sh”,里面可以写一些命令,直接进到当前目录下“./名.sh”即可运行
脚本text.sh:
                 #!/bin/bash
                echo $1 $2
                echo $0
                echo $#
                echo $@
                echo $$
                echo $?
注:执行的时候需要加上两个参数,参数之间要用空格分开

       在shell脚本的第一行通常需要写上“#!/bin/bash”,这一行指明了此shell脚本使用哪个shell对其进行解释执行。“#”注释的标记

2.shell脚本的执行
      ①赋予可执行权限
      执行操作为:
                            $ chmod 755 test.sh
                            $ ./test.sh
      ②使用特定的shell解释执行:
                               $ bash test.sh
      ③使用“.”命令或者“source”
                                $ .   test.sh 或者 $ suorce test.sh

3.交互式脚本
     交互式脚本:允许用户在执行的过程中输入数据,脚本根据得到的数据进行相应的操作

     在shell脚本中可以使用read命令读取用户输入的变量的值,然后将其赋予一个变量
read命令格式:
            read   [ -p  “字符串”] 变量名
例:
       #!/bin/bash
       #read program
       read -p “Please input your name:”  username
       echo “Hello ! Your name is $username”

注意:
         使用-p进行提示,并且变量名和前面的字符串之间至少有一个空格
        
4.变量的数值运算
    shell定义的变量都是字符串类型,故没办法直接进行算数运算
   declare命令可以声明为整形数
例:
       $ declare  -i  num1=10
       $ declare  -i  num2=20
       $ declare  -i  num3=num1+num2
       $ echo num3…………………………num3= 30

5.脚本逻辑判断与表达式
      shell语言中可以用test进行判断,格式为:$ test  条件 或者  [条件]
test命令能够对条件的执行结果进行判断,并且能够返回真(0)或者假(非0)
例:
 判断/etc/passwd是否为一个文件:
        $ sudo test  -f  /etc/passwd ;

        $ echo $?


                                                                    test命令运算符列表

对字符串进行判断
判断结果
string1 = string2
判断string1是否等于string2,若相等,返回真
string1 != string2
判断string1是否不等于string2,若不相等,返回真
-z string
判断string长度是否为0,若为0返回真
-n string
 判断string长度是否不为0,若不为哦这返回真


    对整数进行判断
判断结果
int1 -eq  int2
判断两个整数是否相等,若相等,返回真
int1 -ne  int2
判断两个整数是否不相等,若不相等返回真
int1  -gt  int2
判断int1是否大于int2,若大于返回真
int1  -ge  int2
 判断int1是否大于等于int2,若是,返回真
int1  -lt  int2判断int1是否小于int2,若小于,返回真int1  -le  int2判断int1是否小于等于int2,若是,返回真
 

对文件存在或者类型进行判断
判断结果
                              -e
判断文件是否存在,若存在返回真
                              -b
判断文件是否是块设备文件,若是,返回真
                              -c
判断文件是否是字符设备文件,若是返回真
                              -f
 判断文件是否是普通文件,若是返回真
                              -d 判断是否是一个目录,若是返回真                              -L判断是否是一个链接文件,若是返回真 


对文件属性进行判断
判断结果
                             -s
判断文件是否是空白文件,若是返回真
                             -r
判断文件是否可读,若是返回真
                             -w
判断文件是否可写,若是返回真
                             -x
判断文件是否可执行,若是返回真
                             -u 判断文件是否设置了SUID,若是返回真                             -g判断文件是否设置了SGID,若是返回真                                                  -k判断文件是否设置了sticky bit属性,若是返回真

   

两个文件比较
判断结果
                file1  -nt  file2
判断file1是否比file2新,若是返回真
              File1  -ot  file2
判断file2是否比file1新,若是返回真


   逻辑判断
判断结果
                条件1  -a  条件2
当条件1和条件2同时为真时,返回真
              条件1  -o  条件2
当条件1和条件2只要有一个为真时,返回真
                 !条件1当条件1为假时,返回真
  
   

6.条件判断if语句
    格式一:
          if [ 条件 ]
          then       
               命令1
               命令2
         fi
注:
         if和“[”之间,条件和左右的括号之间都必须有空格,并且then命令要是和if命令写在同一行,那应该写成:if  [ 条件 ] ;then ……
        当条件为真时,执行then后的命令,否则直接执行fi后的命令

   格式二:
             if  [ 条件 ] ;then
                    命令1
                    命令2
                    …………
            else
                   命令3
                   命令4
                   …………
            fi

    格式三:
             if  [ 条件1 ] ;then
                    命令1
                    …………
             elif  [ 条件2 ] ;then
                       命令2
                       …………
             elif [ 条件3 ] ;then
                     命令3
                     …………
             else
                     命令4
                     …………
             fi
注:elif可以嵌套任意多个
7.case命令
      case语句可以代替if……elif……fi语句,case基本格式为:
            case 变量值 in
            值1)
                      命令1
                      ;;
             值2)
                      命令2
                       ;;
              …………
              *)
                       命令3
                        ;;
              esac

注:
           case执行顺序:首先用变量跟值1比较,若相同执行命令1,否则跟值2比较,若相同执行命令2,以此类推,如果都不相同,则执行默认的命令,即*)内的命令
          每个段落内最后都要有两个“;;”结尾,以表示命令结束,并且最后应该使用esac来结尾。

8.循环
  bash中有三种循环命令:for循环、while循环、until循环
(1) for……in……循环
 for能够根据in后面的变量的数目执行循环,其格式如下:
        for   自定义变量  in  变量1  变量2  变量3 ……
        do
                 命令
        done
     for循环第一次执行循环时,会把变量1的值赋予自定义变量,然后执行do和done之间的命令,当执行完毕后,再把第二个变量赋予自定义变量,然后再执行do和done之间的命令,以此类推,直到for循环结束

(2)while循环
  语法格式:
            while  [ 条件 ]
            do
                  命令1
                  …………
            done

注:
       break在这里同样可以结束循环
        while循环能够对后面的条件进行判断,当条件为真是,就是执行do和done之间的命令,只到条件为假,退出循环
(3)until循环
until循环正好和while循环相反,是只有当条件为真的时候才退出循环
    until 循环的命令格式:
               until [ 条件 ]
                do
                      命令1
                      …………
                 done

9.脚本调试
          $ bash  [ -xvn ] 脚本名
          -n选项不执行脚本,只检查脚本的语法错误

          -x选项可以将所有脚本的内容在执行是显示出来





1 0