導航:首頁 > 凈水問答 > bashshell過濾r

bashshell過濾r

發布時間:2023-04-11 11:31:32

『壹』 linux中設計一個shell腳本程序可以接受命令行輸入的參數執行相應的菜單命令

之所以用到命令行參數,關鍵在於shell腳本需要與運行腳本的人員進行交互。
bash shell提供了命令行參數添加在命令後面的數據值)、命令行選項修改命令行為的單字元值)和直接讀取鍵盤輸入。
1、命令行參數
向shell腳本傳遞數據的最基本方式是使用命令行參數。
1)讀取參數
讀取輸入的參數的變數為位置參數,位置參數通過標准數字表示,
其中$0為程序名稱,$1為第一個參數,$2為第二個參數,依次類推,直到$9為第九個參數。
shell腳本自動將命令行參數賦值給各個位置變數。
同時輸入多個參數可以是數值也可以是字元串)時,必須使用空格分隔要想在參數值中包含空格,就必須使用單引號或雙引號)
當參數多於9個後,必須在shell腳本內使用大括弧將變數括起來,如${10}。從而可以使用任意個參數。
2)讀取程序名稱
傳遞給變數$0的字元串實際上是程序的路徑根據調用方法決定是相對還是絕對路徑)。
使用basename命令可以去掉路徑前綴,只獲得程序名稱名字中不 可以有空格)。
3)測試腳本
當腳本認為應該包含參數,卻實際上沒有數據時,就會出錯。
好的方法是對參數進行檢查來保證使用參數前確實存在數據,可以使用-n參數來檢查。
例子:if [ –n 「$1」 ] then .. else .. fi
2、特殊的參數變數
用於跟蹤命令行參數
1)參數計數
使用特殊變數$#測試執行腳本時包含的命令行參數個數。腳本中任何位置都可以 使用$#
例子:if [ $# –ne 2 ] 即可測試參數個數
可以使用${!#}來返回最後一個命令行參數當無參數時,$#為0,而${!#}為程序名)
2)獲取所有數據
變數$*將命令行中提供的所有參數作為一個單詞處理,它將多個參數看成 一個參數。
變數$@將命令行中提供的所有參數作為同一個字元串中的多個單詞處理。 允許對其中的值進行迭代一般使用for),分隔開不同參數
3、移位
shift命令能夠改變命令行參數的相對位置。默 認將每個參數變數左移一個位置變數$0不變,把$1丟棄,注意不可以恢復了!)
在不清楚參數數目情況下,這是一個迭代參數的好辦法。
可以為shift提供一個參數,來實現多位移變化。
4、處理選項
選項是由破折號引導的單個字母,用於更改命令的行為。
1,找出選項
1)處理簡單選項
可以使用處理命令行參數相同的方法處理選項,抽取時使用case語句進行判斷是否符合選項格式。
2)從參數中分離選項
同時使用選項和參數時,可以使用--指示選項列表的結束。發現--後,shell就知道後面的是普通參數了,停止使用case處理選項。
3)處理帶值的選項
選項後緊跟參數值,一種方法是在case中對應選項後使用shift和讀後一位參數的方法處理。更好的方法如 下:
2,使用getopt命令
getopt命令在處理選項和參數時非常方便。它對參數進行重新組 織,以便於解析
1)命令格式
getopt可以接受任森余意形此察滾式的選項和參數列表,並自動將它們轉換為適當的格式。
命令格式為: getopt options optstring parameters
選項字元串(opstring)用於定義命令行中的有效選項字母,以及哪些選項字母需要參數值。
2)腳本中使用getopt
需要使用set命令將現有的命令行選項和參數替換為getopt命令生成的 格式化形式。
需要將原始腳本命令行參數送給getopt命令,然後將getopt命令輸出送給set命令,如下:set – `getopts –q ab:cd 「$@」`
但是getopt命令不能沒猜很好的處理帶有空格的參數值,它將空格解析為參數分隔符,而不是將雙引號引起來的兩個 值合並成一個參數。解決辦法如下:
3)更高級的getopts命令
getopts命令順序的對現有的shell參數變數進行處理,每調用一次,只處理命令中檢測到的參數中的一個。處理完所有參數後,以大於0的退出 狀態退出。
非常適宜於在循環中解析所有命令行參數
格式為: getopts optstring variable
$optarg包含需要參數值的選項要使用的值,$optind包含getopts停止處理時在參數列表中的位置。
注意:當getopts處理時,會將選項前的-去掉,所以對應的case中不需要破折號。
好的特性:
1)可以在參數值中包含空格
2)選項字母和參數值中間可以沒有空格
3)將在命令行中找到的未定義的選項都綁定為單一的輸出——問號
5、標准化選項
有一些字母選項具有標准含義。最好按照標准含義定義選項意義
-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y
6、獲取用戶輸入
當需要在執行過程中獲得執行腳本人員的輸入,使用read命令
1)基本讀取
read命令接受標准輸入或其他文件描述符輸入。讀入後將數據放入 一個標准變數中。
-p 允許在read命令行中直接指定一個提示。
可以指定多個變數,也可以不指定將放置在reply環境變數中)
2)計時
使用-t指定一個計時器,計時數滿還未輸入,read返回一個非0的退出狀態。
使用-n指定輸入的字元個數,輸入達到預定數目時,就自動結束輸入
3)默讀
使用-s使輸入不顯示在終端例如輸入密碼)
4)讀取文件
最常用的方法是使用cat命令,並通過管道傳給包含read的while語句。

『貳』 Linux相關使用介紹

Linux命令分為內部命令(shell自帶的命令)和外部命令(不是shell自帶的命令,由用戶安裝),怎麼鑒別是內部命令和外部命令呢?可以通過type命令來鑒別
什麼是shell呢?shell是一個程序,常用的有bash shell,平時我們通過用戶名和密碼登錄到linux,其實就是登錄到bash shell程序,通過bash shell來操作linux內核

命令執行流程

那豈不是說使用外部命令效率會很慢嗎?
其實一點都不慢,它會去PATH環境變數設置的一堆目錄中查找

cd is a shell builtin 表示內部命令
ifconfig is hashed (/usr/sbin/ifconfig) 表示外部命令

cd命令切換文件夾
現在我們cd /usr/sbin

通過cat命令查看文件內容
通過cat ifconfig來查看ifconfig,發現是亂碼文件

file命令查看文件類型
輸入file ifconfig

從輸出信息可以看出它是一個二進制可執行文件

whereis命令查看文件位置

find / -name jdk

echo命令用戶列印信息,相當於java中的system.out.println

可以使用回車查看下一行、空格查看下一頁、q退出

一般使用man查看外部命令,help查看內部命令

查看linux下的應用和應用的進程號

當我們在這個窗口中輸入kill -9 1593的話,另外一個正在編輯文件的進程就會退出

在前面我們已經講過,bash shell程序在執行命令的一個過程及原理,對於外部命令,它會去PATH這個環境變數中查找執行命令所在的路徑,當然在去PATH中尋找之前會先去hash表中查找這個命令有沒有執行過,執行過的話會記錄在hash表中,則此次查找只需從hash表中就可以很方便的找到

查看分區信息 -h 表示文件大小後面會顯示文件大小

查看文件的使用情況

使用man ls 查看ls命令的相關介紹
-a:可以查看隱藏文件
-l:以長列表的形式展示文件列表信息

第一位 -:表示文件,d表示文件夾,b表示塊設備文件,c表示字元設備文件,p表示命令管道文件,s表示套接字文件, 從第二位開始往後數九位表示屬主許可權(每三位一組 rwx:讀、寫、執行),第11位表示的點表示分隔符,點後面的數字表示文件有幾個硬連接,第一個root代表屬主名,第二個root代表這個第一個root所在的組織,接下來的5表示文件大小,5後面的日期表示文件最後一次修改的時間, 1.txt代表的文件或文件夾的名稱
小結:

切換文件目錄
cd 文件路徑
cd:切換到家目錄
cd ~:回到家目錄(也就是家目錄)
cd ..:回到上一級目錄

創建目錄
mkdir 目錄名
mkdir -p 目錄名,級聯創建目錄

cp 被拷貝的文件(可以是路徑加文件名) 拷貝到哪個位置

復制目錄使用
cp -r 被拷貝的目錄 目標位置

移動命令
mv 被移動的文件 目標位置+目標文件名

rm 文件名(此中方式的刪除需要再輸入 yes)
rm -f 文件名,無提示直接刪除
rm -rf 文件夾

ln命令默認創建的是硬連接

ln profile a:將a硬連接到profile文件上,他們底層共用一個文件,刪除他們之中任何一個
對另外一個沒有影響,同時你也可以使用 ll -i命令查看文件編號

ln -s profile a:將a軟連接到profile文件,當你訪問a的時候會去訪問profile,profile再訪問底層文件,當將profile刪除了之後a就無法訪問了

一致時間、創建新文本
touch 已存在的文件:會將文件的訪問時間、更新時間、改變時間(即上面stat中介紹的三個時間)變成一致
touch 不存在的文件:會創建一個新的文本

cat命令查看文件內容
cat 1.txt:查看單個文件內容
cat 1.txt 2.txt:查看多個文件

more 1.txt:以分頁的形式查看文件內容,按空格:下一頁,回車:下一行(注意它不能回看,回看的話只能用滑鼠回輪)

less 1.txt:使用空格下一頁, b看上一頁, 回車看下一行
注意less的話會把整個文件內容載入到內存,如果文件比較大的話,建議使用more命令查看

head命令默認查看文件前10行內容, head 1.txt
head -5 1.txt:查看文件前5行的內容

tail命令默認查看文件後10行的內容 tail 1.txt
tail -5 1.txt:查看文件後5行內容
tail -f 1.txt:實時查看文件增量內容

cat b.txt | head -3:管道左邊的命令會以輸出流的形式交給管道右邊的命令,管道右邊以輸入流的形式接收並且拼到命令的右邊

注意:ls -l 不能接受前面的輸出流,這個怎麼辦呢?可以通過xargs命令

vi文本編輯器末行模式的操作

set nu(number的縮寫): 設置行號
set nonu(nonumber的縮寫):取消行號
set readonly:設置為只讀

n:往下查找
N:往上查找

n:往上查找
N:往下查找

一般我們會在/etc/profile文件中設置一些環境變數,但是在設置的時候可能沒有記住目錄,這時候我們可以使用如下方式

效果

格式 :s/str1/str2/gi
/ : 臨近s命令的第一個字元邊界字元,也可以是 @或#
g : 一行內全部替換
i : 忽略大小寫

范圍
n:行號
. :當前游標行
+n :偏移n行
-3
%:全文

全部刪除 1,$d

刪除前三行

刪除倒數第2行

游標挪到最後一行 按下小寫的p
效果圖

正則表達式是對字元串操作的一種邏輯公式,就是用事先定義好的一些特殊字元、及這些特定字元的組合組成一個"規則字元串",這個"規則字元串"用來表達對字元串的一種過濾邏輯。

\ :轉義字元
. :匹配任意單個字元
[1249a] :匹配中括弧中任意字元
[^12] :匹配中括弧中任意非1和2的字元
[a-k] :匹配中括弧中任意a~k中的一個字元
^ :行首
$ :行尾
<abc> :單詞首尾邊界(匹配單詞abc)
| :連接操作符
(,) : 選擇操作符
\n :反向引用

? :匹配0到1次

在Linux中通過grep命令使用正則表達式來匹配信息

f :選擇顯示的列
s :不顯示沒有分隔符的行
d :自定義分隔符

n :按數值排序
r :倒序
t :自定義分隔符
K :選擇排序列
u :合並相同行
f :忽略大小寫

sed:行編輯器,以行為單位進行處理,可以將數據進行替換、刪除、新增、選取等特定工作

sed [options] 'Command' file ...

-n :靜默模式,不再默認顯示模式空間(內存)中的內容
-i :直接修改原文件
-e SCRIPT :可以同時執行多個腳本
-f /PATH/TO/SED_SCRIPT
-r :表示使用擴展正則表達式

d :刪除符合條件的行
p :顯示符號條件的行
a \string :在指定的行後面追加新行,內容為string
\n :可以用於換行
i \string :在指定的行前面添加新行,內容為string
c :取代,c的後面可以接字元串
s /pattern/string/修飾符:查找並替換。默認只替換每行中第一次被模式匹配到的字元串
g :行內全局替換
i :忽略字元大小寫
s///:s###,s@@@
(),\1,\2

sed "2p" ctxt
但是在執行下面的操作的時候文本中的內容都顯示出來了,它的原理是,列印匹配的行,以及文本中所有的內容

注意:它刪的是內存中的數據,而不是目標文件

sed -i "3d" ctxt

它的原理是先把內存中的第3行數據刪除,然後再把內存中的數據寫回原文件,這時原文件中的第三行就沒有了

使用變數的形式

awk是一個強大的文本分析工具。
相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。
簡單來說awk就是把文件逐行的讀入,(空格,製表符)為默認分隔符將每行切片,切開的部分再進行各種分析處理。

awk -F '{pattern + action}' {filenames}
支持自定義分隔符,默認是以空格分隔的
支持正則表達式匹配
支持自定義變數,數組 a[1] a[tom] map(key)
支持內置變數
ARGC 命令行參數個數
ARGV 命令行參數排列
ENVIRON 支持隊列中系統環境變數的使用
FILENAME awk瀏覽的文件名
FNR 瀏覽文件的記錄數
FS 設置輸入域分隔符,等價於命令行 -F選項
NF 瀏覽記錄的域的個數
NR 已讀的記錄數
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符
支持函數
print、split、substr、sub、gsub
支持流程式控制制語句
if、while、do/while、for、break、continue

練習題
passwd文件內容解讀:
passwd文件中每行由7個欄位組成,欄位與欄位之間由:分隔,第一個欄位代表用戶名,第二個欄位表示用戶對應的加密後的密碼,第三個欄位表示userId,第四個欄位表示groupId,第五個欄位表示對用戶的描述,第六個欄位表示用戶的家目錄,第七個欄位表示的是這個用戶默認使用的shell

其中$0表示整行

統計報表:合計每人1月工資, 0:manager,1:worker

將awk後面的內容封裝到一個文件中(封裝的腳本要遵循一定的格式)

qqq文件的內容格式

『叄』 Bash shell 特點總結

自學Linux的過程中做了一點小總結,因此寫出來和大家分享一下,希望能共同進步!

Bash shell的特點:

1、 命令的自動補齊:Tab鍵

2、 命令的頃哪歷史記憶功能:上下鍵;!+數字可以自動找出在history中的相應命令並且執行;!+string可以自動找到最近一個以string開頭的命令並且執行;!$指的是上一個命令的最後一個參數;!!指的是上一個命令,因為在腳本中不能進行翻頁,所有常作為腳本命令執行,ctrl+R可以搜索歷史命令。

3、 別名功能:alias可以查看別名;unalias cp取消別名;~username/.bashrc可以進行永久別名的設置;\cp –rf /etc/hosts表示忽略別名

4、 快捷鍵:^R搜索歷史命令;^D登出系統;^A將游標移到命令開始;^E將游標移到命令結尾;^K將游標移到中間刪除後半部命令;^U將游標移到中間刪除前部分命令;^Y撤銷上個操作

5、 前後台作業控制 :命令之後加一個&表示將工作提交到後台執行;命令前加一個nohup可以讓該命令在終端關閉之後還可以執行;^C殺死前台正在運行的任務;^Z,將前台工作扔到後台去執行;bg展示後台正在運行的工作,也可以用jobs;fg表示將後台運行的工作調到前台運行;kill %+數字表示殺死後台某一個作業

6、 輸入輸出重定向:0表示標准輸入;1表示標准輸出;2表示標准錯誤,也就是錯誤輸出;>表示寫入某一個文件,>>表示追加寫入某一個文件;2>&1:& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1,即和1重定向的文件系統上的位置是一樣的; cat << EOF > file:EOF是一個從標准輸入傳遞命令給cat的標志,執行結束的命令輸出到file文件中保存

7、 Tee管道,相當於一個三通,可以在特定地方截取管道命令的輸出信息。

管道文件不同於常用文件,管道文件就跟水一樣是一個動態的文件,每個時間點打開管道文件查看都能看到不一樣的東西,而常用文件只要不進行更改都是一樣雀猛碼的內容,另外管道文件都遵循一個原則:先進先出後進後出,顧名思義就是先被管道接受的東西首先被記錄。

另:

關於命名知含管道與匿名管道的區別:創建命名管道:mkfifo +管道名字

8、 命令排序:

不具備邏輯判斷能力:分號

具備邏輯判斷能力:&& 和 ||

注意:

Command &  後台執行

Command &>/dev/null  混合重定向

Command1 && Command2  命令排序,具備邏輯判斷能力

9、 shell通配符(元字元,即表示的不是本意)

*匹配任意多個字元

?匹配任意一個字元

[]表示匹配括弧內的任意一個字元:[abc]表示匹配abc中的任意一個,而[^abc]表示除了abc之外的任意一個字元。

(command)在子shell中執行命令

{}將幾個元素括起來表示一個集合,可以用來批量創建和刪除文件

\ 轉義字元,讓元字元回歸本意

『肆』 如何使用bash shell 實現連個文件的內容對比

用猛御diff 是比較方便枝睜岩的但是 輸出不是很容易看懂 你也可以用PSPad 或者用file diff 之類的小工具,早喚 不過這些工具只能在windows 下用

『伍』 在 bash shell 環境下,當一命令正在執行時,按下 ctrl+z 會出現什麼情況

1、當TTY是物理設備時,選擇Ctrl+C作為方便的組合鍵來生成信號。該信號是SIGINT,它告知當前進程終止。

由於終端窗口是模擬的TTY,因此該擊鍵組合(以及許多其他組合)已保留並在模擬中復制。請注意,是模擬的終端窗口。Bashshell是在該TTY中運行的程序。

可以輕松地看簡此到已分配給Ctrl+C和Ctrl+V的功能。假設鍵入以下命令,然後按「Enter」。

『陸』 用Linux Shell 腳本過濾IP地址192.168.0.100/29中的100和29,應該怎麼寫語句

過濾出來是幾個意思。
得到
192.168.0.100/29 還是
192.168.0.
還是
所有以100/29結尾的ip

『柒』 求Bash Shell腳本,判定文件是否存在。

elif ....; then else ....fi大多數情況下,可以使用測試命令來對條件進行散搏測試。比如可以比較字元串、判斷文件是否存在及是否可讀等等… 通常用" [ ] "來表示條件測試。注意這里的空格很重要。要確保方括弧的空格。 [ -f "somefile" ] :判斷是否是一個猛掘塵文件 [ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行許可權 [ -n "$var" ] :判斷$var變數是否有值 [ "$a" = "$b" ] :判斷$a和$b是否相等 -r file 用戶可讀為真 -w file 用戶可寫為真 -x file 用戶可執行為真 -f file 文件為正規文件為真 -d file 文件為目錄為真 -c file 文件為字元特殊文件為真 -b file 文件為塊特殊文件為真 -s file 文件大小非0時為真 -t file 當文件描述符(默認為1)指定的設備為終端時為真 ######################################################### 含條件選擇的shell腳本 對於不含變數的任務簡單shell腳本一般能勝任。但在執行一些決策枝禪任務時,就需要包含if/then的條件判斷了。shell腳本編程支持此類運算,包括比較運算、判斷文件是否存在等。基本的if條件命令選項有: -eq —比較兩個參數是否相等(例如,if [ 2 –eq 5 ]) -ne —比較兩個參數是否不相等 -lt —參數1是否小於參數2 -le —參數1是否小於等於參數2 -gt —參數1是否大於參數2 -ge —參數1是否大於等於參數2 -f — 檢查某文件是否存在(例如,if [ -f "filename" ]) -d — 檢查目錄是否存在 幾乎所有的判斷都可以用這些比較運算符實現。腳本中常用-f命令選項在執行某一文件之前檢查它是否存在。 ################################################################## 判斷文件是否存在 #!/bin/sh today=`date -d yesterday +%y%m%d` file="apache_$today.tar.gz" cd /home/chenshuo/shell

『捌』 win10安裝了bash shell後,有什麼有趣的用法

rm -r *.exe 遞歸地刪友察掉所有exe文件

rm -r *.* 進化版 刪信逗掉所好坦茄有文件

『玖』 shell 字元串過濾問題

read-p"pleaseinput:"str
echo$theFile|sed-r's/(.*_)[^_]+$/1'$str'/g'

『拾』 如何理解 bash shell

要理解bash shell,首先得分別理解桐叢bash和shell。
先說shell,shell就是一個「殼」,是操作系統(內核)與用戶之間的橋梁,充當命令解釋器的作用,將用戶輸入的命令翻譯給系統執行。與Windows下的DOS一樣,提供一些內建命令供用戶使用局喊櫻,可以用這些命令編寫shell腳本來完成復雜的工作。
再說bash,目前有幾種流行的shell有:tcsh, csh, bash, ksh,各有什麼聯系與滲含區別我這里就不多講了,相信你可以在網上查到相關資料(包括bash是指 Bourne-again shell),但我要說的是目前很多linux發行版里默認帶的都是bash shell。

閱讀全文

與bashshell過濾r相關的資料

熱點內容
聊城反滲透膜清洗 瀏覽:58
保山礦井污水處理設備多少錢 瀏覽:734
空氣過濾減壓閥怎樣 瀏覽:606
斗山回油濾芯上面裝的小碗是什麼 瀏覽:187
蒸餾裝置中的前餾分是什麼 瀏覽:275
污水用日語怎麼說 瀏覽:507
大眾2016polo換空氣濾芯怎麼換 瀏覽:697
water是什麼牌子的凈水器 瀏覽:560
雷沃鏟車液壓油箱怎麼換濾芯 瀏覽:897
蒸餾裝置中如何正確安裝溫度計 瀏覽:381
車用液壓機油濾芯怎麼清洗 瀏覽:437
納米水性環氧樹脂 瀏覽:296
凈化器定時h是什麼意思 瀏覽:313
一體式濾芯買什麼牌子的好 瀏覽:314
釀造酒與蒸餾酒成分比較 瀏覽:140
電熱水器排污水開關壞 瀏覽:177
污水廠排放量計算 瀏覽:325
飲水機冷膽漏水什麼原因 瀏覽:57
陶氏超濾膜2880過濾面積 瀏覽:823
沃康延齡泉飲水機怎麼樣 瀏覽:830