shell程式設計 (二)

2021-07-29 01:50:43 字數 4191 閱讀 6614

雜亂模組:$?  ---  上一次的結果碼

對指令碼進行檢測語法錯誤

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...