1. 程式人生 > 其它 >Linux第六天 shell

Linux第六天 shell

shell指令碼必須以#!/bin/bash/開頭 (相當於c語言 #include<stdio.h>),shell指令碼檔案字尾為sh,沒有也行,Linux對字尾沒明確要求

指令碼需要有可執行許可權(chmod賦予許可權),那樣可以用./shell檔案 執行,不然就用sh shell檔案 執行(相對絕對路徑都可)

Linux Shell 中的變數分為,系統變數和使用者自定義變數。
系統變數:$HOME、$PWD、$SHELL、$USER 等等,比如: echo $HOME 等等..

顯示當前 shell 中所有變數:set

定義變數用 變數名=值,等號兩側不能有空格,變數名一般用大寫字母定義(只是規範,小寫的也可以執行),輸出變數需要加上$輸出,例:A=100 echo $A

撤銷用unset 變數名

readonly定義靜態變數 靜態變數不可撤銷

註釋:單行用#,

多行用

:<<!

註釋內容

!

用反引號獲取返回值 例 A='date',A=$(date) 等價於反引號

設定環境變數(定義全域性變數在在/etc/profile檔案中寫)

1) export 變數名=變數值 (功能描述:將 shell 變數輸出為環境變數/全域性變數)
2) source 配置檔案 (功能描述:讓修改後的配置資訊立即生效)
3) echo $變數名 (功能描述:查詢環境變數的值)

位置引數變數
介紹:當我們執行一個 shell 指令碼時,如果希望獲取到命令列的引數資訊,就可以使用到位置引數變數
比如 : ./myshell.sh 100 200 , 這個就是一個執行 shell 的命令列,可以在 myshell 指令碼中獲取到引數資訊(相當於其它語言的函式傳參)

語法:$n (功能描述:n 為數字,$0 代表命令本身,$1-$9 代表第一到第九個引數,十以上的引數,十以上的引數需要用
大括號包含,如${10})
$* (功能描述:這個變數代表命令列中所有的引數,$*把所有的引數看成一個整體)
$@(功能描述:這個變數也代表命令列中所有的引數,不過$@把每個引數區分對待)
$#(功能描述:這個變數代表命令列中所有引數的個數)

運算子

基本語法
1) “$((運算式))”或“$[運算式]”或者 expr m + n
2) 注意 expr 運算子間要有空格, 如果希望將 expr 的結果賦給某個變數,使用 ``

3) expr m - n
4) expr \*, /, % 乘,除,取餘

#!/bin/bash
#案例 1:計算(2+3)X4 的值
#使用第一種方式
RES1=$(((2+3)*4))
echo "res1=$RES1"
#使用第二種方式, 推薦使用 RES2=$[(2+3)*4] echo "res2=$RES2"
#使用第三種方式 expr TEMP=`expr 2 + 3`
RES4=`expr $TEMP \* 4`
echo "temp=$TEMP"

條件判斷
判斷語句
基本語法
  [ condition ](注意 condition 前後要有空格)
  #非空返回 true,可使用$?驗證(0 為 true,>1 為 false)
應用例項
  [ asd ] 返回 true
  [ ] 返回 false
  [ condition ] && echo OK || echo notok 條件滿足,執行後面的語句

判斷語句
常用判斷條件
  1) = 字串比較
  2) 兩個整數的比較
  -lt 小於
  -le 小於等於 little equal -eq 等於
  -gt 大於
  -ge 大於等於
  -ne 不等於

  3) 按照檔案許可權進行判斷
  -r 有讀的許可權
  -w 有寫的許可權
  -x 有執行的許可權
  4) 按照檔案型別進行判斷
  -f 檔案存在並且是一個常規的檔案
  -e 檔案存在
  -d 檔案存在並是一個目錄

if判斷基本語法

  if [ 條件判斷式 ]
  then
  程式碼
  elif [條件判斷式]
  then
  程式碼
  fi

case語句

for迴圈

while語句(while 和 [有空格,條件判斷式和 [也有空格)

#!/bin/bash
#案例 1 :從命令列輸入一個數 n,統計從 1+..+ n 的值是多少?
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
#i 自增
i=$[$i+1]
done
echo "執行結果=$SUM"

read 讀取控制檯輸入
基本語法
read(選項)(引數)
選項:
-p:指定讀取值時的提示符;
-t:指定讀取值時等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待了。。
引數
變數:指定讀取值的變數名

#!/bin/bash
#案例 1:讀取控制檯輸入一個 NUM1 值
read -p "請輸入一個數 NUM1=" NUM1
echo "你輸入的 NUM1=$NUM1" #案例 2:讀取控制檯輸入一個 NUM2 值,在 10 秒內輸入。
read -t 10 -p "請輸入一個數 NUM2=" NUM2
echo "你輸入的 NUM2=$NUM2"

自定義函式

#!/bin/bash/
#定義函式 getSum
function getSum() {
SUM=$[$n1+$n2]
echo "和是=$SUM" }
#輸入兩個值
read -p "請輸入一個數 n1=" n1
read -p "請輸入一個數 n2=" n2
#呼叫自定義函式
getSum $n1 $n2