shell語句(在別人那看到的 感覺不錯 分享下)

2021-05-25 22:04:16 字數 4732 閱讀 5885

shell程式設計第一講(靈魂の低調)

一.輸出重定向

在開發shell指令碼的過程中,你經常需要捕捉乙個命令的輸入並儲存在檔案中,這就是重  定向的過程。

例如 $date>now 將date的輸出重定向到檔案now。命令輸出就不在

終端螢幕上,代之以輸出到檔案中,因此檢視檔案now, $ cat now

當然我們也可以把命令列表輸出到重定向,如下所示:

date;uptime;who;>mylog

1.追加到檔案

shell提供第二種輸出重定向的方法,可以把輸出追加到檔案中,該方法操作符》.

例如:通過使用如下命令你能防止每次將日期新增到mylog檔案中時資料丟失:

date;uptime;who;>>mylog    看到了吧,這就是追加到檔案的魅力所在。

2.將輸出重定向到檔案和螢幕

在某些情況下你需要將指令碼的輸出定向到乙個檔案和終端螢幕,假如我們要生成乙個記錄  其活動的日誌檔案,我們不能把他重定向到檔案,因為那樣沒有互動性,所以要將命令的  輸出重定向到螢幕,你可以使用tee命令,其基本語法:命令名|tee 檔名

例如:$date|tee now

會在終端螢幕上生成:2023年 06月 11日 星期五 09:00:18 cst

二.輸入重定向

指令碼為了執行正確的命令,經常需要向使用者詢問輸入資訊。因此就用到輸入重定向。下面  我簡單介紹下:

1.當前文件

輸入重定向可以生成當前文件,例如你要列印號碼,你可以先把號碼輸入到當前文件,  再列印當前文件即可,這比使用臨時檔案簡單,因為臨時檔案既要被生成又要被刪除。

形式:命令名 << delimiter

document

delimeter

記住delimeter必須是不包含空格或tab的單詞

2.讀取使用者輸入

shell指令碼中完成的乙個通常任務是提示使用者輸入資訊病讀取資訊。

語法: read name(name是指定的變數名)

shell程式設計第二講(靈魂の低調)

檔案描述符(檔案控制代碼)

重要: 標準輸入 0

標準輸出 1

標準錯誤 2

1.使用檔案描述符和檔案關聯

用exec命令將任何檔案和檔案描述符關聯,語法是:$ exec n>file  (n是整數,file是  檔名)如:$ exec 4>fd4.out  把檔案fd4.out和文  件描述符4關聯起來。

2.重定向標準輸出和標準錯誤到單獨檔案

檔案描述符最常用的將標準輸出和標準錯誤重定向到單獨檔案,基本語法為:

cmd 1>file1 2>file2 在這裡,命令的標準輸出被重定向到檔案file1,標準錯誤被重定    向到檔案file2。當然我們也可以用追加操作符代替標準的重定向操作符(追加操作符在  第一講已經提及,這兒就不重複了)

3.重定向標準輸出和標準錯誤到同乙個檔案

由上面我們已經知道如何把stdout(標準輸出)和stderr(標準錯誤)重定向到不同的文  件,但是我們如何將他重定向到乙個檔案呢?基本語法:cmd>file 2>& 這樣cmd的檔案描  述符1和檔案描述符2都被重定向檔案file

4.重定向兩個檔案描述符

我們也可以將乙個檔案描述符重定向到另乙個檔案描述符:n>&m

輸出重定向的普通格式經常和exec命令結合來複製乙個已經開啟的檔案描述符:exec  n>&m (這裡m是乙個已經開啟的檔案描述符)

下面我來舉個例子讓大家能更好的理解:

如果檔案描述符4被開啟,exec  4> a.txt

接著的命令: exec 5>&4, 這樣描述符5成為檔案描述符4的複製品了

5.關閉檔案描述符

基本語法:

exec n>- (n是乙個已開啟的檔案描述符)

學完的問題:

給出下列指令碼:

exec 4>out.txt

exec 5>&4

exec 1>&5

date

請問date命令的輸出將在哪兒結束?

shell程式設計第四講(靈魂の低調)

今天是學shell程式設計前基礎的最後一講了。

列出和終止程序

1.jobs命令 

使用這個命令可以顯示哪些程序被懸掛,哪些在後台執行。當然由於jobs命令是乙個前台  程序,所以無法顯示前台程序。顯示後我們可以用fg和bg命令來操作他們,這在第三講已  說過,不再重複。

2.ps命令

這也是乙個可以顯示所有執行中的程序的命令ps(process status的縮寫),預設狀況下,  它能顯示所有正在執行的程序

該命令語法格式如下:

ps [選項]

下面對命令選項進行說明:

-e 顯示所有程序。

-f 全格式。

-h 不顯示標題。

-l 長格式。

-w 寬輸出。

a 顯示終端上的所有程序,包括其他使用者的程序。

r 只顯示正在執行的程序。

x 顯示沒有控制終端的程序。

我這裡介紹的比較簡單,具體的大家可以查資料。

3.關閉程序(kill命令)

$ kill &任務號

4.父程序和子程序

我們知道的程序識別符號是pid,而父程序識別符號是ppid,系統中每乙個使用者程序都有父程序

他們的關係是管理和被管理的關係,當父程序終止時,子程序也隨之而終止。但子程序終  止,父程序並不一定終止。

shell程式設計第五講(靈魂の低調)

變數的操作

在shell程式設計中,我們用到兩種變數:標量變數和陣列變數

一.標量變數

定義格式:name=value

1.變數名

變數的名稱只能包含字母,數字和下劃線,且第乙個字元只能是字母或下劃線

2.變數值

你可以分配任何值到變數中(記住賦值中不能加空格符號)如:$name=ling hun di diao

這個就是錯誤的。

3.訪問變數

例如:$name=hacker

$echo $name

hacker

這個例子中,shell首先確定變數name被引用,繼而開始尋找name的值,最後用echo列印  出來

二.陣列變數

1.建立陣列變數

格式:name[index]=value

2.訪問陣列的值

乙個陣列變數的值可以通過:$

例如:$name[0]=hacker1

$name[1]=hacker2

$ echo $

結果為:hacker2

訪問陣列中的所有元素可以用命令: $ 或者$

三.唯讀變數(變數被定義後不能再修改或去掉)

我們用命令readonly標為唯讀

例如: $name=hacker

$ readonly name

$echo $name

hacker

$ name=hacker3

執行最後一條命令會報錯!!

四.刪除變數

命令:unset

如:刪除 name變數則該如此:unset name

不過有一點得記住 unset命令不能刪除唯讀變數

shell程式設計第六講(靈魂の低調)

環境和shell變數

當shell執行乙個程式時,它傳遞給這個程式的一組變數稱為環境,在環境中的每乙個變數都被稱為環境變數

1.輸出環境變數

命令:export name

由name指定的變數被放置在環境裡,輸出變數表示為:

name=value;export name

注意:單個export命令可以用來輸出多個變數。

2.shell變數

shell變數是指shell初始化的時候設定並內部運用的變數

變數名有:pwd,uid,shlvl,reply,random,seconds,ifs,path,home

具體用法大家可以在網上自行搜尋!

環境和shell變數就這麼多

現在留個問題給大家:環境變數和區域性變數有什麼區別?

shell程式設計第七講(靈魂の低調)

檔名置換

最常用到的置換就是檔名稱的置換或通配。

一.元字元 *

簡單的檔名置換就是*號,這裡*代表0個或多個任意字元。

如:$ ls * 會列出當前目錄下的所有檔案。

1.匹配乙個字首

為了匹配乙個檔案字首,可以這樣使用*:

cmd aa*

其中cmd是指乙個命令名,aa是匹配的資料夾字首

如:我們要列出當前目錄下以cgi開頭的檔名,可以這樣,$ls cgi*

2.匹配乙個字尾

cmd *aa,方法與上述類似,不多解釋

3.匹配字首和字尾

cmd aa*bb

注意點:萬用字元是大小寫敏感的。

二.元字元 ?

元字元*有個限制就是它匹配0個或多個字元,那麼有時我們要是只想匹

配乙個字元該怎麼辦?那就要用到元字元?

例如:$ ls ch??.doc

結果為:ch01.doc  ch02.doc  ch03.doc

三.匹配字元集合

用*和?有潛在的問題:不能匹配字母或數字,那麼我們可以用這對元字元

語法如下:

cmd [chars]        chars是字元集合

四.字元的範圍

1.0-9

2.a-z

3.a-z

五.取消乙個集合

操作語法:

cmd [!chars] 

例如:列出不以字母a開頭的檔名: $ls [!a]

看到別人的雞湯

理解和討論之前請先學會如何觀察!計算機組成原理 dos命令 組合語言 c語言 不包括c 書寫規範 資料結構 編譯原理 作業系統 計算機網路 資料庫原理 正規表示式 其它語言 包括c 架構 對學習程式設計者的忠告 多用小腦和手,少用大腦 眼睛和嘴,會更快地學會程式設計!眼過千遍不如手過一遍!書看千行不...

那都是別人的架構

不可否認,時勢可造英雄,但媒介往往更願意發揮 製造自卑感 的商業本質來展現英雄的英姿而非事蹟,讓我們這些平凡人永遠觸手不可及也。站在聆聽者角度,我更願意傾聽的是他們的每一筆畫是如何練就的 每乙隻文字是如何演繹的 每一行 是如何飛舞的,這比其它都來得真實和實在。當面對 精品 時大大不需自卑,如果能重來...

網上看到的分頁語句

具體不多說了,只貼出相關原始碼 using system using system.collections.generic using system.text using system.data using system.data.oledb using system.web public clas...