不要把shell指令碼命名為test,因為在linux中已經有乙個名為test的實用程式。首先要使shell找到指令碼程式,有三種方法:
1. 將shell指令碼檔案所在的路徑新增到path環境變數中
2. 在命令列中使用檔案的絕對路徑或相對路徑執行,不過得修改許可權,如命名乙個指令碼檔案為hello,然後修改許可權才能執行
3. 同二,命名乙個檔案為hello.sh,用 sh hello.sh即可
指令碼第一行一定定要寫上#!/bin/bash ( 表明使用的shell型別);接著都知道指令碼程式執行時會列印很多輸出,使用echo 列印輸出
環境變數
使用set可以顯示活動環境變數的完整列表,使用$符號可取值,看乙個簡單的指令碼(指令碼中經常需要列印輸出自己的工作環境)
#!/bin/bash
echo uid: $uid
echo home: $home
使用者變數
val1=10
val2=-10
val3=hello
val4="hello"
shell指令碼自動為變數值確定資料型別(字串),若要引用得需要$
反引號允許將shell命令的輸出賦值給變數,見程式(這是一種為了日誌檔名提取日期的常用技術)
#!/bin/bash
today=`date +%y%m%d`
ls /usr/bin -al > log.$today
輸入重定向,是把乙個檔案內容重定向到乙個命令中,格式command < inputfile,還有一種重定向:
內建重定向,這種重定向允許在命令列中而非檔案中為輸入重定向指向資料,使用方式如下,符號<<,但在開頭和末尾都必須使用相同的檔案標記
comman << marker(常使用eof)
data
marker(常使用eof)
#例如 wc << eof
> test string
1 > test string
2 > test string
3 > eof
expr命令允許處理命令列中的等式,如下
expr 1 + 5
#必須得分開寫,不然會被識別為乙個
expr 5 * 2(錯誤)
expr 5 \* 2 (使用轉義字元)
再看乙個程式
#!/bin/bash
var1=10
var2=20
var3=`expr $var2 / $var1`
echo the result is $var3
更常用的是使用和$即可進行數學計算,如下
#!/bin/bash
var1=100
var2=50
var3=45
var4=$[$var1*($var2-$var3)]
echo the result is $var4
但注意bash shell的數學操作只支援整數演算法
為了解決上訴只能進行整數的問題,常用的是用內建的bash計算器(bc),退出須輸入quit。
浮點算術被稱為scale的內建變數控制。(scale 是設小數字數的,預設為0)
在指令碼中使用bc的基本格式為:
var=`echo 「options; expression」 | bc`
下面在指令碼中使用bc,此例子設定4位小數
#!/bin/bash
var1=100
var2=45
var3=`echo
" scale=4; $var1 / $var2 " | bc`
echo the answer is $var3
對於簡短的計算這種方法很好,但有時數字會很多。如果有多個計算,就會很亂,因此可以有兩種解決方案
1. 使用重定向,允許把乙個檔案重定向到bc命令
2. 使用內建重定向
看乙個使用內建重定向的例子
#/bin/bash
var1=10.46
var2=43.76
var3=33.2
var4=71
var5=`bc << eof
scale = 4
a1 = ($var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
eof`
echo the answer is $var5
每條在shell中執行的命令都使用乙個退出狀態,這個退出狀態是乙個介於0~255之間的整數值,每當命令執行完時,命令就會把退出狀態傳遞給shell。
可以使用$?來查詢,如執行完一條命令後可以使用echo $?來檢視,下面列舉一些常見的推出值
0:命令成功完成
1:通常的未知錯誤(如提供乙個無效的引數)
2:誤用的shell命令
126:命令無法執行(使用者沒有許可權)
127:沒有找到命令(命令不存在)
128:無效的退出引數
130:ctrl+c終止的命令
預設情況下,shell指令碼以指令碼中最後一條命令的退出狀態退出,當然你可以使用exit命令更改退出狀態碼。 Shell指令碼程式設計 變數
1 變數定義的方法 name value name中的規則同c語言,value可以是任何值,如果包含空格,則應該使用 引起來。2 訪問變數 varname 3 定義陣列變數 name index value 這裡的index可以為n,不用從0開始賦值,如我只定義 name 3 value,則name...
shell指令碼程式設計之變數簡介及指令碼執行過程
變數型別 字元型 數值型 真 假 事先確定資料的存放格式和長度 變數存放在記憶體空間 編譯型語言,沒有額外的處理邏輯,屬於強型別語言 指令碼型語言,可以有直譯器控制 所以,可以是弱型別語言 強型別 變數在使用前,必須事先宣告,甚至還需要初始化 給乙個初始值,如果沒給乙個原始值,裡面是隨機數 弱型別 ...
Shell指令碼程式設計(一)
變數的型別 或者 由 反引號 括起來的也是一條命令,shell 先執行該命令,然後將輸出結果立刻代換到當前命令列中。如下 date 日期函式 czk localhost date date czk localhost echo date sat may 18 23 45 47 edt 2019 方式...