title: shell學(xué)習(xí)(一)
time: 2018.3.1 星期五 16:11
變量
- 變量與變量的內(nèi)容以 '=' 來連接贸街。
- 等號(hào)兩邊都不能直接接空格憋飞。
- 變量命名要求 秘通,不能以數(shù)字開頭,由數(shù)字和英文字母組成。
- 有空格符可以以單引號(hào)或者雙引號(hào)將變量內(nèi)容結(jié)合起來太颤。
- 雙引號(hào)內(nèi)的特殊字符如 $ 可以保持原來的1意思。
- 單引號(hào)內(nèi)的特殊字符則僅為一般字符(純文本)。
- 可用轉(zhuǎn)義字符 ’\‘ 將特殊符號(hào)轉(zhuǎn)義為1一般字符.
- 在一串命令中需要通過其他命令提供的信息墓拜。可使用反單引號(hào)或者$ ;反單引號(hào)為鍵盤上方的數(shù)字鍵盤1左邊的按鍵请契。
- 若變量為了增加變量的內(nèi)容咳榜。可使用 ‘$變量名稱’ 或者 ’${變量名稱}‘累加內(nèi)容爽锥,以:作為后綴涌韩。
- export 使變量成為環(huán)境變量。
- unset 取消設(shè)置環(huán)境變量A
查看自己的系統(tǒng)支持哪些shell
/etc/shell
傳遞參數(shù)
- $0 執(zhí)行的文件名字
- 向腳本傳遞參數(shù)氯夷,腳本內(nèi)獲取參數(shù)的格式為:$n臣樱。n 代表一個(gè)數(shù)字,1 為執(zhí)行腳本的第一個(gè)參數(shù),2 為執(zhí)行腳本的第二個(gè)參數(shù)雇毫,以此類推……
參數(shù)處理 | 說明 |
---|---|
$# | 傳遞到腳本的參數(shù)個(gè)數(shù) |
$* | 以一個(gè)單字符顯示所有向腳本傳遞的參數(shù) |
$$ | 腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào) |
$! | 后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的ID號(hào) |
$@ | 與$*相同奢啥,但是使用時(shí)加引號(hào),并在引號(hào)中返回每個(gè)參數(shù)嘴拢。 |
$- | 顯示當(dāng)前shell使用的當(dāng)前選項(xiàng) |
$? | 顯示最后命令的退出狀態(tài) 0 表示沒有任何錯(cuò)誤桩盲。其他任何值表明有錯(cuò)誤。 |
@ 不同:前者 “1席吴,2赌结,3” 后者 “1”,“2”孝冒,“3”
數(shù)組
- 定義
array_name={value0,value1...}
- 引用
${array_name[index]}
- 數(shù)組長度
${#array_name[*]}
${#array_name[@]}
基本運(yùn)算符
算術(shù)運(yùn)算符
- expr 使用反引號(hào) 不是單引號(hào)
val=`expr 2 + 2` #兩個(gè)數(shù)相加 + 號(hào)左右要有空格
- 算術(shù)運(yùn)算符
- , -, * , / ,%, = , ==, !==
乘號(hào) * 需要 反斜號(hào) \ 轉(zhuǎn)義
- , -, * , / ,%, = , ==, !==
- == 與 !=
$a == $b
$a != $b
關(guān)系運(yùn)算符
- 關(guān)系運(yùn)算符只支持?jǐn)?shù)字柬姚,不支持字符串,除非字符串的值是數(shù)字庄涡。
運(yùn)算符 | 說明 |
---|---|
-eq | 兩個(gè)數(shù)是否相等 |
-ne | 兩個(gè)數(shù)是否不相等 |
-gt | 檢測左邊的數(shù)是否大于右邊的 |
- lt | 檢測左邊的數(shù)是否小于右邊的 |
-ge | 檢測左邊的數(shù)是否大于等于右邊的 |
-le | 檢測左邊的數(shù)是否小于等于右邊的 |
$a -eq $b
布爾運(yùn)算符
運(yùn)算符 | 說明 |
---|---|
! | 非運(yùn)算 |
-o | 或運(yùn)算 |
-a | 與運(yùn)算 |
邏輯運(yùn)算符
運(yùn)算符 | 說明 |
---|---|
&& | 邏輯的AND |
|| | 邏輯的OR |
字符串運(yùn)算符
運(yùn)算符 | 說明 |
---|---|
= | 兩個(gè)字符串是否相等 |
!= | 兩個(gè)字符串是否不相等 |
-z | 檢測字符串是否長度為0 為0 返回 true |
-n | 檢測字符串是否長度為0 不為0 返回 true |
$ | 檢測字符串是否為空 不為空返回true |
文件測試運(yùn)算符
操作符 | 說明 |
---|---|
-b file | 檢測文件是否是塊設(shè)備文件 是返回true |
-c file | 檢測文件是否為字符設(shè)備文件 是返回true |
-d file | 檢測文件是否是目錄 是返回true |
-f file | 檢測文件是否為普通文件(不是目錄 也不是設(shè)備文件)是 返回 true |
-g file | 檢測文件是否設(shè)置了 SGID位 是返回true |
-k file | 檢測文件是否設(shè)置了粘著位(Sticky Bit)量承,如果是,則返回 true穴店。 |
-p file | 檢測文件是否是有名管道撕捍,如果是,則返回 true泣洞。 |
-u file | 檢測文件是否設(shè)置了 SUID 位忧风,如果是,則返回 true球凰。 |
-r file | 文件是否可讀 |
-w file | 文件是否可寫 |
-x file | 文件是否可執(zhí)行 |
-s file | 文件是否為空 |
-e file | 檢測文件(目錄)是否存在 是返回true |
echo
#顯示換行
echo -e "hello \n"
#顯示不換行
echo -e "hello \c" #-e 開啟轉(zhuǎn)義 \c 不換行
#顯示結(jié)果定向至文件
echo "hello" > file
#原樣輸出字符串 不進(jìn)行轉(zhuǎn)義或取變量 用單引號(hào)
echo ' string'
#顯示命令執(zhí)行結(jié)果 用反引號(hào)
echo `date`
printf
- 格式
printf format-string [arguments.....]
- 類比c語言printf 多一個(gè) - 指定對齊方式
printf "%-10s %-8s %-4s\n" 姓名 性別 體重kg
- 表示左對齊 沒有則右對齊
printf "%d %s\n" 1 "abc"
# 單引號(hào)和雙引號(hào)一樣
# 沒有引號(hào)也可以輸出
- printf的轉(zhuǎn)義序列
序列 | 說明 |
---|---|
\a | 警告字符狮腿,通常為ASCII的BEL字符 |
\b | 后退 |
\c | 抑制(不顯示)輸出結(jié)果中任何結(jié)尾的換行字符(只在%b格式指示符控制下的參數(shù)字符串中有效),而且呕诉,任何留在參數(shù)里的字符缘厢、任何接下來的參數(shù)以及任何留在格式字符串中的字符,都被忽略 |
\f | 換頁(formfeed) |
\n | 換行 |
\r | 回車(Carriage return) |
\t | 水平制表符 |
\v | 垂直制表符 |
\ | 一個(gè)字面上的反斜杠字符 |
\ddd | 表示1到3位數(shù)八進(jìn)制值的字符甩挫。僅在格式字符串中有效 |
\0ddd | 表示1到3位的八進(jìn)制值字符 |
test 命令
if test $a
流程控制
- if else
if condition
then
command1
elseif condition2
then
command2
else
command3
fi
- for 循環(huán)
for var in item1,item2...itemN
do
command1
command1
done
- while
while condition
do
command
done
-until 循環(huán) 直到條件為true為止
until condition
do
command
done
-case 多選擇語句
case 值 in
模式一)
command1
;;
模式二)
command2
;;
*)
command3
;;
esac
-break
允許跳出所有循環(huán)
- continue
跳出當(dāng)前循環(huán)
shell函數(shù)
[ function ] funname [()]
{
action;
[return int;]
}
- 在Shell中贴硫,調(diào)用函數(shù)時(shí)可以向其傳遞參數(shù)。在函數(shù)體內(nèi)部捶闸,通過 1表示第一個(gè)參數(shù)删壮,$2表示第二個(gè)參數(shù)...
- 調(diào)用 funName 1 2 3
shell 輸入/輸出重定向
命令 | 說明 |
---|---|
command > file | 將輸出重定向到 file。 |
command < file | 將輸入重定向到 file兑牡。 |
command >> file | 將輸出以追加的方式重定向到 file央碟。 |
n > file | 將文件描述符為 n 的文件重定向到 file。 |
n >> file | 將文件描述符為 n 的文件以追加的方式重定向到 file。 |
n >& m | 將輸出文件 m 和 n 合并亿虽。 |
n <& m 將輸入文件 m 和 n 合并菱涤。
<< tag 將開始標(biāo)記 tag 和結(jié)束標(biāo)記 tag 之間的內(nèi)容作為輸入。
- 需要注意的是文件描述符 0 通常是標(biāo)準(zhǔn)輸入(STDIN)洛勉,1 是標(biāo)準(zhǔn)輸出(STDOUT)粘秆,2 是標(biāo)準(zhǔn)錯(cuò)誤輸出(STDERR)。
- here Document
command << delimiter
document
delimiter
shell 文件包含
使用 . 號(hào)來引用test1.sh 文件
./test1.sh