第一個Shell腳本
test.sh內容
#! /bin/bash
#告訴系統用什麼解釋器執行
#井號爲註釋
echo "what's your name?"
#echo命令打印輸出
read name
#read命令讀取鍵盤輸入
echo "hello $name"
運行shell兩種方法:
- 作爲可執行程序
chmod +x ./test.sh
加可執行權限
./test.sh
作爲二進制程序運行要加./
告訴系統在當前目錄下查找 - 作爲解釋器運行的參數
/bin/bash test.sh
Shell變量
定義變量
var1="value"
變量名和等號之件不能有空格
使用變量
echo ${var1}
變量名前加美元符號,花括號用於限定邊界,防止二義性
重新定義變量
var1="null"
只讀變量
readonly var1
使用readonly命令把變量var1
設置爲只讀;
這時無法給變量重新賦值
刪除變量
unset var2
使用uset命令刪除變量,注意,unset不能刪除只讀變量
變量類型
1)局部
2)環境
3)shell變量
Shell中特殊變量
變量 | 含義 |
---|---|
$ | 當前shell進程ID |
0 | 腳本文件名 |
n | 傳遞給基本的第n個參數 |
# | 傳遞給腳本的參數個數 |
* | 傳遞給腳本的所有參數,被雙引號包含時”“,與@有所不同,*會將所有參數當做一個整體 |
@ | 傳遞給腳本的所有參數,被雙引號包含時”“,與*有所不同,@會將參數分割開來 |
? | 上個命令的退出狀態,或者函數的返回值 成功0 失敗1 |
例子
test.sh內容如下
#! /bin/bash
echo "current file name:$0"
echo "first parameter:$1"
echo "second parameter:$2"
echo "all parameters:$@"
echo "all parameters:$*"
echo "total numbers of parmeters:#"
執行./test.sh bxb lsy
後結果
current file name:./test.sh
first parameter:bxb
second parameter:lsy
all parameters:bxb lsy
all parameters:bxb lsy
total numbers of parmeters:#
Shell替換
轉義字符
轉義字符 | 含義 |
---|---|
\\ | 反斜槓 |
\a | 警報,響鈴 |
\b | 退格,刪除鍵 |
\f | 換頁(FF),將當前位置移動到下頁開頭 |
\n | 換行 |
\r | 回車 |
\t | tab,水平製表符 |
\v | 垂直製表符 |
使用時echo -e "換行前\n換行後"
加參數-e
使用轉義,加上-E
禁用轉義
命令替換
命令替換指Shell可以先執行命令,將命令結果保存在變量中,再在合適的地方輸出
使用方法 反引號將要執行的命令擴起來
DATE=`date`
#這裏date是shell命令,獲取當前時間,用反引號括起來,執行結果保存在變量DATE中
echo $DATE
變量替換
變量替換可以根據變量的狀態(是否爲空 是否定義)來改變它的值
可以使用變量替換的形式
形式 | 說明 |
---|---|
var | 使用變量本身的值 |
var:-word | 如果變量var爲空或已被刪除(unset),那麼返還word,不改變 |
var:=word | 如果變量var爲空或被unset,返回word,並將var設爲word |
var:?message | 如果var爲空或被unset,那麼將消息message送到標準錯誤輸出,可以用來檢測變量是否被正常賦值;若此替換出現在Shell腳本中,腳本將停止運行 |
var:+word | 如果變量已被定義,返回word,但不改變變量的值 |
Tips: | 變量替換都在var爲空或unset情況下執行,如果var已被設置,將直接輸出變量 |
例子
test.sh內容如下
#!/bin/bash
echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"
echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"
unset var
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"
var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"
echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"
執行./test.sh
後結果
Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set
3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix