linux历程--shell脚本基本编程

1)shell脚本第一行必须是如下格式:
      #!/bin/sh
   符号#!用来指定该脚本文件的解析程序。上面就是使用/bin/sh来解析该脚本,
   编辑好后,要执行该脚本,还必须有可执行属性:
      chmod +x filename
注:可在终端输入 cat  /etc/passwd 指令查看linux为各用户预设的shell解析器。

如:   root:x:0:0:root:/root:/bin/bash

           wm:x:1000:1000:wm,,,:/home/wm:/bin/bash

      表示为root用户和wm用户预设的bash解析。


2)#开头表示注释,直到该行结束


3)变量没有类型,所有变量都由字符串组成,调用时前面加$,如:
      #!/bin/sh
      #set variable a
      a="hello word"
      # print a
      echo "A is:"
      echo $a


4)有时候变量名容易与其他文字混淆,如:
      num=2
      echo "this is the $numnd"
   结果将只会输出: this is the ,因为shell会去搜索变量numnd的值,这个变
   量是没有定义值得。可使用花括号解决上述问题:
      num=2
      echo "this is the ${num}nd"
   结果会输出: this is the 2nd


5)默认变量:
    $# :传入脚本的命令行参数个数
    $* :所有命令行参数值,在各个参数之间留有空格
    $0 :命令本身(shell文件名)
    $1 :第一个命令行参数
    $2 :第二个命令行参数
   如:脚本文件名为 example,内容如下:
#!/bin/sh
echo "number of vars:"$#
echo "values of vars:"$*
echo "value of cmd:"$0
echo "value of var1:"$1
echo "value of var2:"$2
echo "value of var3:"$3
   运行  ./example 1 2 3  (表示执行example脚本并传入1,2,3三个参数)
   输出:   number of vars:3
                   values of vars:1 2 3
                   value of cmd:./example 1 2 3
                   value of var1:1
                   value of var2:2
                   value of var3:3
 

   运行   sh example 1 2 3
   输出:   number of vars:3
                   values of vars:1 2 3
                   value of cmd:example 1 2 3
                   value of var1:1
                  value of var2:2
                  value of var3:3
   注意:两种运行方式中$0的区别。


6)变量首次被赋值是加上local关键字可以声明一个局部变量。如:
#!/bin/sh
hello="var1"
echo $hello
function func1 {
   local hello="var2"
   echo $hello
}
func1
echo $hello
   注意:“function func1 {”中func1和“{”之间必须要加个空格,否则会报
   错。
   输出:  var1
                 var2
                 var1


7)变量注意事项:
    变量赋值是,“=”左右不能有空格;
    BASH中的语句结尾不需要分号。


8)if语句格式:
     第一种:    if [ expression ]
                 then
                     #code block
                 fi
      
     第二种:    if [ expression ]
                 then
                     #code block
                 else
                     #code block
                 fi


      第三种:   if [ expression ]
                 then
                     #code block
                 else if [ expression ]
                      then
                          #code block
                      else
                          #code block
                      fi
                 fi
    注意:“[”和“]”左右两边必须要留有有空格或回车。


9)if常用的比较操作符:
    比较操作          整数操作           字符串操作
      相同                  -eq                           =
      不同                   -ne                          !=
      大于                  -gt                            >
      小于                  -lt                             <
      大于等于          -ge
      小于等于          -le
      为空                                                 -z
      不为空                                             -n
    例:
      比较整数a和b是否相等: if [ $a = $b ]   #也可用-eq
      判断整数a是否大于整数b: if [ $a -gt $b ]
      比较字符串a和字符串b是否相等: if [ $a = $b ]
      判断字符串a是否为空: if [ -z $a ]
    注意:操作符(包括“=”,这里不是赋值符)左右都有空格。 


10)文件判断符:
-e  文件已经存在
-f  文件是普通文件
-s  文件大小不为零
-d  文件是一个目录
-r  文件对当前用户可以读取
-w  文件对当前用户可以写入
-x  文件对当前用户可以执行
    如:   #!/bin/sh
           folder=/home
           [ -r "$folder" ] && echo "Can read $folder"
           [ -f "$folder" ] || echo "this is not file"
    注意:“&&”表示前面判断为真时才执行后面语句;“||”表示前面判断为
    假时才执行后面的判断;变量内部不存在空格时,加不加双引号都一样,即
    folder=/home和folder="/home"效果一样


11)for循环基本结构:
        for var in [list]
        do
            #code block
        done
    其中&var(var是变量名)是循环控制变量,[list]是var需要遍历的一个集合,do/done对包含了循环体,

    相当于C语言中的一对大括号。另外如果do和 for被写在同一行,必须在do前面加上“;”。如: for var in [list];do
    (注意:“;”左右空格可有可无,不影响)。
    例如:   #!/bin/sh
             for day in Sun Mon Tue Wed Thu Fri Sat
             do
                  echo $day
             done
    输出: Sun
                  Mon
                  Tue
                  Wed
                  Tue
                  Fri
                  Sat
    注意,如果列表被包含在一对双引号中,则表示一个元素,如:
             #!/bin/sh
             for day in "Sun Mon Tue Wed Thu Fri Sat"
             do
                  echo $day
             done
    则输出:   Sun Mon Tue Wed Thu Fri Sat
    注意:for循环所在行变量day是不加“$”的(相当于给变量赋值阶段),而
    在循环体内,变量$day是必须加上“$”符号的(相当于调用阶段)。  


12)while循环基本结构:
       while [ condition ]
       do
           #code block
       done
    
    until循环基本结构:
       until [ condition ]
       do
           #code block
       done
    注意:while和until的区别在于while是为真时执行,until是为假是执行。


13)case语句格式:
       case "$var" in
          condition1)
             ;;
          condition2)
             ;;
          *)
          default statments;;
        esac
    例:     #!/bin/sh
                 echo "Press your keyboard, then the data return."
                 read Keypress
                 case "$Keypress" in
                 [A-Z]) echo "Uppercase letter";;
                 [a-z]) echo "Lowercase letter";;
                 [0-9]) echo "Digit";;
                 *) echo "Puncturation, whitespace, or other";;
             esac
    注意:read是shell脚本语言提供的一个函数,其功能是“等待,直到你在
    盘输入一个字符,然后赋值给后面的变量”。 


-------------------------------------------------------------------------------------------------------------------

变量内容有空格时必须要加双引号(" ")或单引号(' '),但这两者是有区别的:

双引号内的特殊字符如$等,可以保持原有特性,如:

       var="lang is $LANG"  则  echo $var  可得  lang is en_US

单引号内的特殊字符仅为一般字符,如:

      var='lang is $LANG'  则  echo $var  可得  lang is $LANG

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值