四天精通shell程式設計(二)

2021-06-25 23:35:25 字數 4488 閱讀 4159

變數5 

位置引數變數 $0

命令自己

$1 第乙個引數

$2 第二個引數

$9 第九個引數例2

:輸出位置引數變數,指令碼後要接引數

#!/bin/bash

echo"the command is $0"

echo"canshu1 is $1"

echo"canshu2 is $2" 6 

預定義變數

$? 0 上乙個命令正確執行;非

0 上乙個命令不正確

$# 統計命令之後的引數個數

$* 返回所有引數

$n 位置引數變數例3

:輸出預定義變數

#!/bin/bash

#名字為:

canshu.sh

echo"canshu zongshu $#"

echo"canshu liebiao: $*"

echo $?

附:對其賦予執行許可權:

chmod755 canshu.sh

執行:./canshu.sh1 2 3 4 5 6

7 鍵盤讀取命令

read -p 「

提示資訊」 

-t 等待時間 變數名 例子

4:通過

read

讀入變數值

#!/bin/bash

read-p "please input num1:" -t 30 test1

read-p "input num2:" -t 30 test2

sum=$(($test1 + $test2))

echo「num1 + num2 = $sum」 8 

數值運算

變數值預設都是字串型,要想進行數值運算。以下三種任選一種 1

)declare

方法num1=123

num2=456

declare-i sum=$num1+$num2

2)sum=$(($num1 + $num2 )) #

推薦附:

$(): 

說明括號裡為系統命令,他會執行系統的命令

3)sum=$(expr$num1 + $num2) 注意+

左右必須空格,不然會發生錯誤如:列印:

123+456#

字串疊加 4)

運算子+ - \* / %

取餘附:

shell

程式設計的目的是為了減輕系統管理員的任務

shell

指令碼可能寫不出漂亮的介面,但是他不是用來幹這個的→ 各種程式語言都有他特殊的應用面,比如說

c語言就比

vb在數值計算方面更加精確,而

vb則在介面方面比

c更勝一籌

shutdown-r now #

系統重啟

三shell

中常用命令 1 

行提取命令

grep

選項:-v 

反向選擇

-n 提取時,顯示行號

舉例:grep "[^a-z]hen" test.txt

oo前不是小寫字母的行匹配。

注意:和開頭沒有關係

附:也可以結合以前的內容:

grep-n "[^a-z]hen" test_rule.txt

中括號代表乙個字母,

^代表取反,

a-z代表小寫字母a到

z grep 「\.$」 test.txt

匹配以.

結尾的行

附:在正規表示式中

$代表行尾;

\ 代表轉義符,表示,將其後緊跟字元的特殊含義消失!

linux

中行尾的空格附,也可以作為乙個字元,一定要記住!這是一些指令碼發生錯誤的原因!

grep "^[^a-za-z]" test.txt

匹配不以字母開頭的行

注意:所有字母不能這樣寫 

a-z附:

^在中括號外面代表行首

grep"^[^a-za-z]" test_rule.txt #

這樣也可以

grep 「^$」 test.txt

匹配空白行

grep "oo*" test.txt

匹配最少乙個o附:

o*代表著

*前面的這個

o可以重複

0到無數多次

還可以這樣用:

grep"hh*o" test_rule.txt

這樣: 

grep"ooo" test_rule.txt 2 

列提取命令 1

)cut

cut -d 「

分隔符」 

-f 提取列 檔名

如:cut-d ":" -f 1,3 /etc/passwd

more/etc/passwd | grep "/bin/bash" | cut -d ":" -f1,3

提取passwd

檔案中可以登入的使用者的使用者名稱和

uid附:這裡1,

3之後就不用加檔名了

last 

命令用於檢視那個使用者,在那個埠等資訊下登入到系統,是乙個日誌命令 2

)awk

awk '

條件{動作}

'last| awk '' # $1

代表第一列

提取last

顯示結果的第一和第三列

\t tab

鍵\n 

換行\r 

回車附:也可以是:last| awk ''

last| grep "[0-9]\\.[0-9]\\.[0-9]\\.[0-9]\"| awk ''

在last

中提取包含

ip的行,然後,再在行中提取第一和第三列

awk內建變數

fs 指定分隔符

more/etc/passwd | awk 'begin '

讀取passwd

檔案,以

":"為分隔符,擷取第一和第三列

begin 

在擷取前使分隔符生效。如果沒有

begin

,那麼第一行自定義的分隔符不生效

6 echo

命令echo -e 「

輸出內容」

-e 識別格式化列印內容

echo -e 「1\t2\t3」 

列印tab鍵

echo -e "\e[1;31m this is red text \e[0m" 

輸出紅色字型

\e[ 

格式標誌

1;31m 

指定顏色 

#30到

39之間的數字

0m 恢復顏色(重置)

附:30m=

黑色,31m=

紅色,32m=

綠色,33m=

黃色,34m=

藍色,35m=

洋紅, 

36m=

青色,37=白色

echo -e 「\e[1;42 background \e[0m」

附:背景顏色:

40=黑色,

41=紅色,

42=綠色,

43=黃色,

44=藍色,

45=洋紅,

46=青色,

47=白色 例子

5:echo

輸出的小遊戲

注:cat -a 

檔名顯示檔案隱,包括藏字元

取消dos

文件的回車符,兩種辦法 1

)dos2unix 

文件名 

#unix2dos 

方向相反 2

)vi -b 

文件:%s/^m//g ^m

使用 ctrl+v+m 輸入

例6:資料備份

#!/bin/bash

day=`date+%y%m%d` # 

反引號!!!

#定義日期變數

附:dat=$(date+%f) # 

更方便且更漂亮,列印出:

2013-12-21

size=`du-sh /var/lib/mysql`#定義

mysql

目錄大小的變數,

``符號可以換成

$()附:

sudodu -sh /etc/ # 

統計/etc/

目錄的大小

echo"date: $day" >> /tmp/dbinfo.txt

#把日期輸入資訊文件

echo"data size: $size" >> /tmp/dbinfo.txt

#把大小輸入資訊文件

cd/opt/dbbak

#切換目錄

tarzcf mysqlbak-$.tar.gz /var/lib/mysql /tmp/dbinfo.txt

打包備份

mysql

目錄,同時打包資訊文件

附:在字母

zc後加

v會顯示壓縮過程

rm-f /tmp/dbinfo.txt

沈超 shell課件 四天精通shell程式設計(一)

四天精通shell程式設計 一 閱讀 981 沈超 微博 weibo.com lampsc 一shell簡介 1概念命令直譯器 2常見shell bash linux標準shell 附 她儲存在 etc bash裡面,是乙個二進位制可執行檔案,所以不能直接 vim bin bash會是亂碼 sh早期...

shell程式設計 第二天

ls l dir1 wc l 1。while 條件 do done test 2。until同上,僅僅是條件不成立的時候才執行 3。dev null unix 黑洞。用於清空檔案 cat dev null xx find name a.txt 2 dev null 4。注意 陷阱題之continue...

shell程式設計 第二天

1。while 條件 do done test 2。until同上,僅僅是條件不成立的時候才執行 3。dev null unix 黑洞。用於清空檔案 cat dev null xx find name a.txt 2 dev null 4。注意 陷阱題之continue跳出迴圈後,把列印的東東留在了...