⑴ 在Shell腳本中,讀取鍵盤輸入的內容並將其賦值給Shell變數的命令是什麼
在sell腳本中,讀取鍵盤輸入的內容並將其賦值給shell變數的命令為:
read-p"inputaval:"valecho$val
read - 從標准輸入讀取數值。這個 read 內部命令被用來從標准輸入讀取單行數據。這個命令可以用來讀取鍵盤輸入,當使用 重定向的時候,讀取文件中的一行數據。
它的語法形式一般是:
read[-options][variable...]
這里的 options 是下面列出的可用選項中的一個或多個,且 variable 是用來存儲輸入數值的一個或多個變數名。 如果沒有提供變數名,shell 變數 REPLY 會包含數據行。
基本上,read 會把來自標准輸入的欄位賦值給具體的變數。
⑵ linuxShell文本處理工具集錦
提供的例子和參數都是最常用和最為實用的;
我對shell腳本使用的原則是命令單行書寫,盡量不要超過2行;
如果有更為復雜的任務需求,還是考慮python吧;
find 文件查找
•查找txt和pdf文件
-iregex: 忽略大小寫的正則
•否定參數
查找所有非txt文本
-type f 文件 / l 符號鏈接
•按時間搜索:
-atime 訪問時間 (單位是天,分鍾單位則是-amin,以下類似)
-mtime 修改時間 (內容被修改)
-ctime 變化時間 (元數據或許可權變化)
最近7天被訪問過的所有文件:
•按大小搜索:
w字 k M G
尋找大於2k的文件
按許可權查找:
復制代碼代碼如下:find . -type f -perm 644 -print //找具有可執行許可權的所有文件按用戶查找:
復制代碼代碼如下:find . -type f -user weber -print// 找用戶weber所擁有的文件找到後的後續動作
•刪除:
刪除當前目錄下所有的swp文件:
復制代碼代碼如下:find . -type f -name "*.swp" -delete•執行動作(強大的exec)
復制代碼代碼如下:find . -type f -user root -exec chown weber {} ; //將當前目錄下的所有權變更為weber註:{}是一個特殊的字元串,對於每一個匹配的文件,{}會被替換成相應的文件名;
eg:將找到的文件全都到另一個目錄:
•結合多個命令
tips: 如果需要後續執行多個命令,可以將多個命令寫成一個腳本。然後 -exec 調用時執行腳本即可;
-print的定界符
默認使用』
』作為文件的定界符;
-print0 使用』 ′作為文件的定界符,這樣就可以搜索包含空格的文件;
grep 文本搜索
grep match_patten file // 默認訪問匹配行
•常用參數
-o 只輸出匹配的文本行 VS -v 只輸出沒有匹配的文本行
-c 統計文件中包含文本的次數
-n 列印匹配的行號
-i 搜索時忽略大小寫
-l 只列印文件名
•在多級目錄中對文本遞歸搜索(程序員搜代碼的最愛):
•匹配多個模式
復制代碼代碼如下:grep -e "class" -e "vitural" file•grep輸出以 作為結尾符的文件名:(-z)
復制代碼代碼如下:grep "test" file* -lZ| xargs -0 rmxargs 命令行參數轉換
xargs 能夠將輸入數據轉化為特定命令的命令行參數;這樣,可以配合很多命令來組合使用。比如grep,比如find;
•將多行輸出轉化為單行輸出
cat file.txt| xargs
是多行文本間的定界符
•將單行轉化為多行輸出
cat single.txt | xargs -n 3
-n:指定每行顯示的欄位數
xargs參數說明
-d 定義定界符 (默認為空格 多行的定界符為
)
-n 指定輸出為多行
-I {} 指定替換字元串,這個字元串在xargs擴展時會被替換掉,用於待執行的命令需要多個參數時
eg:
-0:指定 為輸入定界符
eg:統計程序行數
sort 排序
欄位說明:
-n 按數字進行排序 VS -d 按字典序進行排序
-r 逆序排序
-k N 指定按第N列排序
eg:
uniq 消除重復行
•消除重復行
•統計各行在文件中出現的次數
復制代碼代碼如下:sort unsort.txt | uniq -c•找出重復行
復制代碼代碼如下:sort unsort.txt | uniq -d可指定每行中需要比較的重復內容:-s 開始位置 -w 比較字元數
用tr進行轉換
•通用用法
復制代碼代碼如下:•tr刪除字元
復制代碼代碼如下:cat file | tr -d Ɔ-9' // 刪除所有數字-c 求補集
復制代碼代碼如下:•tr壓縮字元
tr -s 壓縮文本中出現的重復字元;最常用於壓縮多餘的空格
•字元類
tr中可用各種字元類:
alnum:字母和數字
alpha:字母
digit:數字
space:空白字元
lower:小寫
upper:大寫
cntrl:控制(非可列印)字元
print:可列印字元
使用方法:tr [:class:] [:class:]
cut 按列切分文本
•截取文件的第2列和第4列:
•eg:
復制代碼代碼如下:paste 按列拼接文本
將兩個文本按列拼接到一起;
默認的定界符是製表符,可以用-d指明定界符
paste file1 file2 -d 「,」
1,colin
2,book
wc 統計行和字元的工具
wc -l file // 統計行數
wc -w file // 統計單詞數
wc -c file // 統計字元數
sed 文本替換利器
•首處替換
•全局替換
復制代碼代碼如下:seg 's/text/replace_text/g' file默認替換後,輸出替換後的內容,如果需要直接替換原文件,使用-i:
•子串匹配標記
第一個匹配的括弧內容使用標記 1 來引用
當使用雙引號時,我們可以在sed樣式和替換字元串中指定變數;
復制代碼代碼如下:•其它示例
字元串插入字元:將文本中每行內容(PEKSHA) 轉換為 PEK/SHA
awk 數據流處理工具
•awk腳本結構
awk 『 BEGIN{ statements } statements2 END{ statements } 『
•工作方式
1.執行begin中語句塊;
2.從文件或stdin中讀入一行,然後執行statements2,重復這個過程,直到文件全部被讀取完畢;
3.執行end語句塊;
print 列印當前行
•使用不帶參數的print時,會列印當前行;
•使用-拼接符的方式(」"作為拼接符);
復制代碼代碼如下:特殊變數: NR NF $0 $1 $2
NR:表示記錄數量,在執行過程中對應當前行號;
NF:表示欄位數量,在執行過程總對應當前行的欄位數;
$0:這個變數包含執行過程中當前行的文本內容;
$1:第一個欄位的文本內容;
$2:第二個欄位的文本內容;
•列印每一行的第二和第三個欄位:
傳遞外部變數
復制代碼代碼如下:用樣式對awk處理的行進行過濾
awk 『NR < 5′ #行號小於5
awk 『NR==1,NR==4 {print}』 file #行號等於1和4的列印出來
awk 『/linux/』 #包含linux文本的行(可以用正則表達式來指定,超級強大)
awk 『!/linux/』 #不包含linux文本的行
設置定界符
使用-F來設置定界符(默認為空格)
awk -F: 『{print $NF}』 /etc/passwd
讀取命令輸出
使用getline,將外部shell命令的輸出讀入到變數cmdout中;
在awk中使用循環
for(i=0;i<10;i++){print $i;}
for(i in array){print array[i];}
eg:
以逆序的形式列印行:(tac命令的實現)
awk實現head、tail命令
•head:
•tail:
復制代碼代碼如下:列印指定列
•awk方式實現:
eg:
awk常用內建函數
index(string,search_string):返回search_string在string中出現的位置
sub(regex,replacement_str,string):將正則匹配到的第一處內容替換為replacement_str;
match(regex,string):檢查正則表達式是否能夠匹配字元串;
length(string):返回字元串長度
printf 類似c語言中的printf,對輸出進行格式化
eg:
迭代文件中的行、單詞和字元
1. 迭代文件中的每一行
•while 循環法
•awk法:
cat file.txt| awk 『{print}』
2.迭代一行中的每一個單詞
復制代碼代碼如下:3. 迭代每一個字元
${string:start_pos:num_of_chars}:從字元串中提取一個字元;(bash文本切片)
${#word}:返回變數word的長度
⑶ linux shell腳本中如何獲取文件的絕對路徑readlink可以么
傳給函數的路徑是/root/file,如果這是函數的第一個參數,那麼函數中可以用 $1 獲取。
得到文件名file1和file2後,echo "$1/file1" 就輸出/root/file/file1,echo "$1/file2" 輸出/root/file/file2。