雜亂模組:$? --- 上一次的結果碼
對指令碼進行檢測語法錯誤
bash -n shell.sh 指令碼
bash -x shell.sh 指令碼,單步執行
date +%s 顯示當前秒數
timedays=$
提前退出指令碼
exit
stat 獲取檔案屬性
一、shell中實現算術運算
a=2 b=5
1、let a + b(算術運算表示式)
2、$[算術運算表示式] c=$[ $a + $b ]
3、$((算術運算表示式)) c=$(($a + $b))
4、expr 算術運算表示式,表示式中各運算元及運算子之間要有空格,而且要使用命令引用 c=`expr $a + $b`
二、測試方法(整數測試)
[ expression ]
[[ experssion ]]
text expression
1、bash中常見的條件測試(注意空格)
整數測試
-gt >
-ne !=
-eq ==
-ge <
-lt >=
-le <=
int1=63
int2=77
[ $int1 -eq $unt2 ]
[[ $int1 -eq $unt2 ]]
test $int1 -eq $unt2
2、檔案測試
-e file 測試檔案是否存在
-f file 測試檔案是不是不同檔案
-d file 測試指定路徑是不是目錄
-r file 測試當前使用者對指定檔案是否可讀
-w file 測試當前使用者對指定檔案是否可寫
-x file 測試當前使用者對指定檔案是否可執行
[ -e file ]
[ -r file ]
三、多分枝的if語句
if 判斷語句1; then
statemen1
elif 判斷語句1; then
statemen1
elif 判斷語句1; then
statemen1
elif 判斷語句1; then
statemen1
else
statemen1fi
四、bash變數的型別
本地變數
環境變數
位置變數
傳遞引數 $1,$2...
特殊變數
$?
$# 引數的個數
$* 引數列表(乙個字串)
$@ 引數列表(多個字串)
五、文字處理
grep
sed(資料流編輯器)
awk
六、sed基本用法
sed:stream editor
行編輯器(全屏編輯器 vi)
並不直接處理檔案本身
sed : 模式空間
預設不編輯原始檔,僅對模式空間中的資料進行處理
處理後,將模式空間顯示到螢幕
sed [options] 'addresscommand' file...
-n:靜默模式(不顯示模式空間)
-i:直接修改原檔案
-e script -e script -e script ...:同時執行多個指令碼
-f /path/to/sed_script :
-r :使用擴充套件的正規表示式
address
1、stratline endline
比如:1-100
$:最後一行
2、/pattern(正規表示式)/
/^root/
3、/pattern1/,/pattern2/
第一次被模式1匹配到的行開始,至第一次被模式2匹配到的行結束,這中間的所有行
4、linenumber
指定的行
5、startline +n
從startline開始,向後的n行
command
d:刪除符合條件的行
p:顯示符合條件的行
a \string:在指定的行後面追加新行,內容是string
\n可以用來換行
i \string:在指定的行前面追加新行,內容是string
number...r file:將制定檔案的內容新增到指定檔案number行後面
w file:將制定檔案的範圍內的內容新增到指定檔案
s/pattern/string/修飾符:查詢並替換(預設只替換是每行中第一次被模式匹配到的字串) 1,$全文
加修飾符 g:全域性替換 i:忽略字元大小寫
s/// == s###
s@/@#@g
&:引用模式匹配整個串
^\/ == /
七、字元測試
==測試是否相等,相等為真
!=>
<
-n string :測試指定字串是否為真,空則真
-s string :與上式相反
a=hello
b=hello
[ $a = $b ]
echo "scale=2;111/22;" |bc
八、迴圈控制結構
for while until
for 變數 in 列表:do
運算done
九、seq 列表
『seq 起始數 步進長度 結束數』:命令替換
declare -i sum=0
integer(整數)
-x(環境變數)
十、文字編輯器,字處理器
ascii
nano 文字編輯器(全屏)
sed 文字編輯器
vim模式
編輯模式(命令模式)
輸入模式
末行模式
預設處於編輯模式
模式轉換
編輯-->輸入:
i:在當前游標所在字元的前面,轉為輸入模式
a:在當前游標所在字元的後面,轉為輸入模式
o:在當前游標所在字元的上一行,轉為輸入模式
輸入-->編輯
esc鍵
編輯-->末行
:末行-->編輯
esc鍵esc鍵
vi:visual inte***ce
vim:vi improved
全屏編輯器:模式化編輯器
(一)、開啟檔案
vim file(存在即開啟,不存在就建立)
vim +12 file 開啟進入第12行
vim + file 開啟定位至最後一行
vim +/pattern 開啟檔案,定位到匹配到的第一行的位置
(二)、關閉檔案
1、末行模式下關閉檔案
w儲存q退出(不儲存)
wq儲存並退出
q!不儲存並退出
w!強行儲存(管理員特有)
2、編輯模式下退出
zz(儲存並退出)
(三)、移動游標
h:左l:右
j:下k:上
attention:這是一些shell程式設計的小案例:
#!/bin/bash
username=user1
userid='id -u $username'
groupid='id -g $username'
if[$userid -eq $groupid];then
echo "good guy"
else
echo "badguy"
fi#!/bin/bash
file=/etc/inittab
if [ -e $file ]; then
echo "ok"
else
echo "not find file"
fi #!/bin/bash
file=/etc/inittab
if [ ! -e $file ]; then
echo ""
exit 1
fiif [ -f $file ];then
echo "common"
elif [ -d $file ];then
echo "dir"
else
echo "unknown"
fi
shell程式設計《二》
一 if語句 if expressino then code block elif expression then code block else code block fi fi 比較整 數a 和b是否 相等 if a b 也 可 用 eq 判斷整 數a是否 大於整數 b if a gt b 比較...
shell程式設計二
同makefile一樣,符號 被用作注釋,也就說shell在解析該指令碼時會忽略這一行,但是 例外。如果需要將多個命令一起執行,可以將這些命令放在同一行,使用分號分割即可,例如 bin bash date whodate命令首先被執行,然後是who命令。通常我們需要顯示一些資訊,可以使用echo命令...
shell程式設計 二
在shell程式中,資料用變數來儲存,使用變數時不需要宣告,預設所有變數型別為字串型別 這裡 和 的效果是一樣的.使用set設定位置引數.形如set ls l 這樣的命令則會把ls l的結果以此作為他的引數.環境變數 說明 home 當前使用者主目錄 path 用以搜尋命令的目錄列表,用 分隔 ps...