SHELL編程規范與變量


  shell相比標准開發語言比如JAVA,C,C++來說還是比較簡單的,其實就是一堆命令的集合而已,初學者從簡單的shell腳本學起,至於shell編程還是要有編程思想在里面,因此,循序漸進很重要,先研究格式語法,再研究編程,今天就列舉一些shell里的概念,以便我們理解shell編程。

1、腳本聲明

  在寫body之前要對shell腳本進行聲明,告訴操作系統,這是一個shell文件,不聲明的話系統默認為用bash來執行腳本。格式如下

  #!/bin/bash(這里的bash可以換成sh、dash、tcsh、csh等)

2、腳本注釋

  注釋格式和一般的編程語言類似,為:#+內容

3、腳本文件名稱規范

  我們可以用.sh結尾,這是比較規范的寫法,但是注意,其實linux里這個.sh不作為識別文件類型的參照,僅僅是用來標記這是一個腳本文件而已,方便我們維護。

4、腳本執行方式

  source  [文件名]

  .  [文件名]

  ./  [文件名]  (注意這種方式文件需要有執行權限)

  bash/dash/sh    [文件名]

5、管道符號

  管道符號的意思是把上一條命令的執行結果作為下一條命令的參數

  例如:cat /etc/passwd | grep "bash" | wc -l (統計下passwd文件下有"bash"的記錄有多少行)

6、重定向

  <0         /dev/stdin    標准輸入

  1>   /dev/stdout 標准輸出                       >>   追加而不是覆蓋

  2>   /dev/stderr 標准錯誤輸出      2>>   追加而不是覆蓋

  &>   混合輸出                &>>   追加而不是覆蓋

注意:符號里的 0、1、2數字可以省略

例:

  ls > file   (意思是把ls查詢出來的內容放入file文件里,而不是顯示在屏幕上)

  ls &>  /dev/null  (把結果放入黑洞設備,不顯示出來)

例:

  cat test.txt  和  cat < test.txt 文件是一個意思

7、自定義變量

  由用戶自己定義、修改和使用,變量名以字母或下划線開頭、區分大小寫

例1:

  name=Tom

  echo $name

  Tom

例2:

  name='zhang san'

  echo $name

  zhang san
例3:

  name=bb

  Name="$nameLY"

  echo Name

  bbLY

例4:

  Name='$nameLY'

  echo Name

  $nameLY
例5:

  TIME=`data`

  echo $TIME

  2016年10月25日星期五  12:32:55 CST

例6:

  TIME=$(data)

  echo $TIME

  2016年10月25日星期五  12:32:55 CST

例7:交互定義變量

輸入:read -p "please input your name:"NAME  

交互:please input your name:zhangsan

輸入:echo $NAME

輸出:zhangsan

例子總結:""識別里面的變量、''把里面當一個字符串、``把里面的命令執行結果定義

8、預定義變量

  由bash預先定義好的一類特殊變量,用戶只能用不能改。

~] #cat mybak.sh

#!/bin/bash

tar zcf $* $>/dev/null

echo "已執行$0腳本"

echo "共完成$#個對象的備份"

echo"具體的內容包括:$*"

~] #./mybak.sh  /etc/passwd    /etc/shadow

已執行./mybak.sh腳本

共完成2個對象的備份

具體的內容包括:/etc/passwd    /etc/shadow

解析:$*或$@保存腳本要處理的參數、$0保存腳本名稱、$#保存了腳本要處理的參數個數、$?保存着命令或腳本的運行狀態碼

9、位置變量

  $n(n為1-9)就是位置變量

~] #vi test.sh

#!/bin/bash

echo $0

echo $1

echo $2

echo $3

~] #source test.sh zhangsan cloud  yes

./test.sh

zhangsan

cloud

yes

注:$0是預定義變量,保存腳本名稱

10、環境變量

  使用env命令可以查看當前工作環境下的環境變量,PATH變量用於設置可執行程序的默認搜索路徑,環境變量的全局配置為/etc/profile每個用戶還有自己獨立的配置文件 ~/.bash_profile。把路徑可執行文件的路徑寫到PATH變量中,就可以直接用路徑里的可執行文件。

例如:apachectl start

方法1:PATH=$PATH:/root   (臨時生效,/root為可執行文件的存放路徑,這句話意思是把/root這個目錄添加到PATH變量里,是臨時寫入內存的)

方法2:echo "PATH=$PATH:/root"  >> /etc/profile (永久生效)

11、變量的作用范圍

  默認情況下新定義的變量只在當前shell環境中有效,因此稱為局部變量,當進入子程序或者新的shell環境時,局部變量將無法再次使用,為了解決這個問題,可以用export指定為全局變量。

  格式1:export 變量名

  格式2:export 變量名=變量值

例:

  ~] #NAME=zhangsan

  ~] #echo $NAME

    zhangsan

  ~] #bash

  ~] #echo $NAME

  "輸出為空"(因為切換shell環境了,而且變量沒有指定為全局變量)

12、運算

例:

  ~] #A=11

  ~] #B=22

  ~] #C=$A+$B

  ~] #echo $C

    11+22

注:shell中輸出的值,linux默認為字符串。

那個為了使運算得以進行,可以這樣:

  expr [變量] [運算符]  [變量2]

  +加法  -減法  \*乘法(\是轉意符,把*轉意為乘)   /除法   %求模、取余

例:

  ~] #x=35

  ~] #y=16

  ~] #c=`expr $x + $y`  (注:+ 左側和右側必須有空格)

  ~] #echo $c

    51

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM