shell腳本基礎

shell腳本編程基礎

1、基本格式

首先在編寫shell的開始要聲明一下該shell所用的腳本類型,我們也稱為shebang機制
eg: #!/bin/bash
    # Description
     ...

2、bash中的變量的種類

(1)、本地變量  生效范圍: 當前shell進程,對當前shell之外的進程及子進程均無效
(2)、環境變量  生效范圍: 當前shell進程及其子進程
      變量聲明
             export     name=Value
             declare -x name=Value
      變量撤銷 unset name 
      變量引用
             $name 或 ${name}
      顯示所有的環境變量
             env 、export、declare -x 、printenv
(3)、局部變量  生效范圍: 當前shell進程中某片代碼段(通常指函數)
(4)、位置變量: 用$1 $2 $3 ... 來表示,用于腳本中調用傳遞給它的參數
      只讀變量: 只能聲明,但不能修改和刪除
              聲明變量 readonly name 
                       declare -r name 
              查看只讀變量 readonly -p 

(5)、特殊變量: $? $0 $* $@ $# $$
      $? 檢查上一條命令是否執行成功 
         echo $?   成功為0
                   非0不成功
      $0 表示命令本身
      $# 表示傳遞給腳本的參數個數
      $* 傳遞給腳本的所有參數  "$*" 將全部參數合并為一個字符串 
      $@ 傳遞給腳本的所有參數  "$@" 每個參數為單獨的字符串
      $$ 顯示當前自己的進程編號
(6)、在shell中() {}的區別
     (): 表示在當前shell的子進程中再開一個進程
     {}: 不在當前的shell進程中開子進程,順序執行
eg:
[root@Centos6 ~]#x=abc;(echo $x;x=def;echo $x);echo $x
abc
def
abc
[root@Centos6 ~]#x=abc;{ echo $x;x=def;echo $x; };echo $x
abc
def
def

3、算數運算

(1)、算數運算
          包括: + - \* / % **
實現算術運算:
     let Var=expression
[root@Centos6 ~]#a=100
[root@Centos6 ~]#b=200
[root@Centos6 ~]#let c=a+b
[root@Centos6 ~]#echo $c
300
     Var=$[expression]
[root@Centos6 ~]#c=$[a+b]
[root@Centos6 ~]#echo $c
300
     Var=$((expression))
     Var=$(expr arg1 arg2 ...) 注: 參數間要有空格
[root@Centos6 ~]#c=$(expr $a + $b)
[root@Centos6 ~]#echo $c
300
     declare -i Var=Value
     echo "expression" | bc
bash中有內建的隨機數生成器
     echo "$[$RANDOM%100]" : 生成0-99之間的隨機數
[root@Centos6 ~]#echo "$[$RANDOM%100]"
53
(2)、賦值
   增強型賦值: += -= *= /= %=
   eg: let a+=5  ==》a=a+5
   其中 ++a : a先自加1后在賦值給a
        a++ : 先賦值后自加1

4、條件測試

(1)、條件判斷

判斷方法:
         test expression
         [ expression ]   注意: 表達式與[]間要有空格,不支持正則表達式
         [[ expression ]] 支持正則表達式
判斷一個參數是否被賦值
         [ "$a" ]  
         echo $?  0為被賦值
                  非0未被賦值
短路與 &&
eg: CMD1 && CMD2 CMD1為真CMD2才執行
短路或 ||
eg: CMD1 || CMD2 CMD1為假CMD2才執行
與 -a 
或 -o
非 -not 或!

(2)、字符串判斷

字符串 :
     == :是否等于
     >  :ASCII碼是否大于
     <  :ASCII碼是否小于
     != :是否不等于
     =~ :左側字符串能否被右側的PATTERN所匹配
         注:此表達式一般用于[[ ]];擴展的正則表達式
eg: [[ $a =~ ^-?[0-9]+$ ]] 判斷$a是否為數字(正數、負數、0)
        [ -z "$a" ] 空為真
        [ -n "$a" ] 非空為真

(3)、文件存在性判斷

文件判斷:
         -a file :
         -e file : 文件是否存在,存在為真,反之為假
eg : [ -e "file" ]
所屬類別:
         -b file:是否存在且為塊設備文件
         -c file:是否存在且為字符設備文件
         -d file:是否存在且為目錄文件
         -f file:是否存在且為普通文件
         -h | -L file:是否存在且為連接文件
         -p file:是否存在且為管道文件
         -S file:是否存在且為套接字文件
權限類:
         -r file:是否存在r權限的文件
         -w file:是否存在w權限的文件
         -x file:是否存在x權限的文件
         -u file:是否存在suid權限的文件
         -g file:是否存在sgid權限的文件
         -k file:是否存在sticky權限的文件
文件大小:
         -s file: 文件是否存在且非空
雙目測試: 
         file1 -ef file2 :file1與file2是否指向同一個設備上的inode
         file1 -nt file2 :file1是否新于file2
         file1 -ot file2 :file1是否舊于file2

5、read命令接受參數的輸入

從標準輸入中讀取值,給每個單詞分配一個變量,剩余的單詞都被分配給最后一個變量
     -p :指定要顯示的信息
     -s :靜默輸入
     -d :指定輸入的結束符
     -t#:超時時間
eg : read -p "Please input a arguement"  aaa  
特殊用法:
         read a b c <<< "xxx yyy zzz"可以將值附給a b c

原創文章,作者:M25_ymd,如若轉載,請注明出處:http://www.www58058.com/83609

(0)
M25_ymdM25_ymd
上一篇 2017-08-04
下一篇 2017-08-04

相關推薦

  • N27_網絡班第八周作業

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間所有主機的在線狀態; 在線的主機使用綠色顯示; 不在線的主機用紅色表示; #!bin/bash # for i in `seq 254`;do if ping -c 1 192.168.68.$i &> /dev/null;then echo -e “…

    2017-09-28
  • HAProxy

    LB Cluster: 四層:lvs, nginx(stream),haproxy(mode tcp) 七層:http: nginx(http, ngx_http_upstream_module), haproxy(mode http), httpd, ats, perlbal, pound… HAProxy 程序環境: 主程序:/usr/sbi…

    Linux干貨 2017-07-03
  • $@與$*的不同之處

    $@與$*的不同之處 $*: 把我們傳遞給腳本的參數全部合為一個字節,當成一個字符串或者參數來使用。 $@: 把我們傳遞給腳本的所有參數,每個參數都為獨立字符串,當我們用 \((n) 來調用的時候, 輸入參數的位置為第幾個,那我們就用用\)n來調用第幾個,一對應。 下面我們用代碼來看一下這兩個的區別: 創建一個簡單的腳本讓他輸出我們輸入的多個參數:&#822…

    2017-06-06
  • linux網絡配置

    主要內容: ip地址以及子網劃分 路由基本概念 網絡配置工具:ifconfig,ip,netstat使用 網卡配置文件及修改 IP地址: 它們可唯一標識 IP 網絡中的每臺設備 v  每臺主機(計算機、網絡設備、外圍設備)必須具有唯 一的地址 v IP地址由兩部分組成:   &n…

    Linux干貨 2016-09-07
  • 配置LAMP服務器網站架構

    配置LAMP服務器網站架構 LAMP指的Linux(操作系統)、ApacheHTTP 服務器,MySQL(有時也指MariaDB,數據庫軟件) 和PHP(有時也是指Perl或Python) 的第一個字母,一般用來建立web應用平臺。 結構拓撲 httpd服務器配置 安裝環境 yum install httpd -y 修改httpd配置 vim /etc/ht…

    2017-06-06
  • 第二周練習作業

    第二周作業 1、2、4、5 題博客中已經總結 3、請使用命令行展開功能來完成以下練習: (1)、創建/tmp目錄下的:ac, ad, bc, bd (2)、創建/tmp/mylinux目錄下的: mylinux/     ├── bin     ├── boo…

    Linux干貨 2016-11-06
欧美性久久久久