Linux shell編程基礎筆記

來源:互聯網
上載者:User

標籤:c   a   com   檔案   使用   string   

1.shell變數
本地變數:
a=1    (等號兩邊不能出現空格)
唯讀變數:
readonly 變數名=變數值    (在使用過程中不能更改)
聲明變數:
linux給變數賦值時預設是字元或字串型,如果需要數值運算,需要事先聲明
declare 參數 變數名[=變數值]
declare的參數: -a:數組 -i:整型 -r:唯讀
設定整型變數,除了用declare -i聲明以外,還可以:
a=$(($a+1)) or a=$[a+1]
清除變數:
unset 變數名(唯讀變數無法清除)

訪問shell變數:
set 顯示所有的本地定義的shell變數
${a} 取變數a的值
echo 顯示變數
echo的參數:
無 不加參數列印完轉換到下一行
-n 列印完不轉換到下一行


從鍵盤讀入為變數賦值:
read [參數] 變數名
read 變數名 變數名 變數名 ...
如果不跟變數名,則輸入會賦給$REPLY
read參數:
-a 表示把輸入存入陣列變數名
-p 在賦值之前先顯示-p後的提示字串,如read -p"?" a 顯示:?input


環境變數:
匯出環境變數(可供外部調用):
export 變數名

位置參數變數:
當指令碼被調用時用來儲存指令碼的命令列參數
echo ${1},${2},...
位置參數移位:
shift [前移量],預設前移1
如:
shift 2        向左移動兩位,通常用在迴圈結構中


特殊變數:
$0:存放當前執行的指令檔名,包括路徑
$#:存放傳遞給指令碼的位置參數的個數
$*:存放所有傳遞給指令碼的參數
[email protected]:和$*一樣,但是每一個參數都用引號引起來
$$:存放當前的進程號
$!:存放後台啟動並執行最後一個進程的進程號
$?:存放最後一個執行完的指令碼或命令的退出狀態 0表示成功,非0表示有錯誤

引用:
雙引號:弱引用,對 $,`,\ 無效
單引號:強引用,任意特殊字元均被屏蔽
反斜線:轉義

變數替換:
${varname:-word}    若varname未定義或空則用word代替varname作為傳回值
${varname:=word}    若varname未定義或空則將word賦值給varname再返回
${varname:?message}    若varname未定義或空則將message作為錯誤資訊輸出
${varname:+word}    若varname已定義且不為空白則用word作為傳回值
${varname:offset}    將$varname中第offset個字元開始到結尾的字串返回,取尾串
${varname:offset:length}將$varname中第offset個字元開始,長度為length的字串返回,取子串


2.流程式控制制
順序結構:
nothing to say

條件測試:
test命令
檢查檔案狀態,判斷字串是否匹配,數值測試等操作
既可以用在分支結構中,又,可以用在迴圈結構中
test 測試條件

[ 測試條件 ](測試條件與左右方括弧之間需要有一個空格)

檔案測試
test [測試條件] FILE

-e 如果FILE存在
-s 如果FILE非空
-d 如果FILE是目錄
-f 如果FILE是普通檔案
-b 如果FILE是塊裝置檔案
-c 如果FILE是字元裝置檔案
-S 如果FILE是通訊端檔案
-L 如果FILE是符號串連檔案
-p 如果FILE是有名管道

-f 如果FILE具有讀許可權
-w 如果FILE具有寫入權限
-x 如果FILE具有執行許可權
-G 如果FILE是被有效組擁有
-O 如果FILE是被有效使用者所擁有
-k 如果FILE設定了sticky位
-u 如果FILE設定了set-user-id位
-g 如果FILE設定了set-group-id位
-N 如果FILE自上次訪問以來被修改過

FILE1 -nt FILE2 如果FILE1比FILE2新
FILE1 -ot FILE2 如果FILE1比FILE2舊
FILE1 -ef FILE2 如果FILE1是FILE2的硬串連檔案,二者指向同一個i節點


字串測試
string1 = string2    字串相等
string1 != string2    字串不相等
-n string1        字串非空
-z string1        字串為空白

數值測試
expr1 -eq expr2        運算式值相等
expr1 -ne expr2        運算式值不相等
expr1 -gt expr2        運算式1大於運算式2
expr1 -lt expr2        運算式1小於運算式2
expr1 -ge expr2        運算式1大於等於運算式2
expr1 -le expr2        運算式1小於等於運算式2

邏輯操作符
與 -a    [ $a = "a" -a $b = "b" ]    if($a=="a"&&$b=="b")    
或 -o    [ $a = "a" -o $b = "b" ]    if($a=="a"||$b=="b")
非 !    [ ! a="a" ]            if($a!="a")


分支結構:(if分支,case分支)
if分支結構:
if 條件測試1;then
 條件測試1為真時的語句
[elif 條件測試2;then]
 條件測試2為真時的語句
...
[else]
 條件測試為假時的語句序列
fi
#如果條件測試語句與then在一行,那麼要用;與then分隔開
#條件測試語句與if,elif,else,then之間至少要有一個空格分開
#elif,else可選,else只可出現一次
#if可以嵌套

case分支結構:
case 值 in
 模式1)
  語句組1
   ...
  ;;
 模式2)
  語句組2
   ...
  ;;
  ......
 *)
   語句組n
esac


迴圈結構
for迴圈:
for 變數 in 值1 值2 ... 值n
do
 語句1
 語句2
 ...
done

與c語言相似的格式
for((i=1;i<=6;i++))
do
 ...
done


while迴圈:
while 條件
do
 語句1
 語句2
 ...
done


select迴圈:
select name in [ in list ]
do
 語句列表
done


3.shell函數
函數的定義:
function funcname
{
 shell commands
}
or
funcname()
{
 shell commands
}

參數的傳遞:
與指令碼的參數相似,使用$1,$2...


#!/bin/bash
my_func()
{
 a=$1
 echo $a
}

read input
my_func() $input

函數的返回可以使用:
return

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.