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