日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

我学shell程序的记录

發布時間:2025/1/21 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我学shell程序的记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 將當前目錄下的文件去除后綴名".sh"
for i in `ls .`
?do
?? mv -v $i `echo ${i%%.sh}`
?done
2.shell中在列文件目錄時防止帶空格的文件名被顯示成2個文件帶空格的文件名變量不被當成兩個參數
ls -1 目錄路徑 | while read line
do
echo $line
done
解釋:ls后面的-1是用來讓文件每行只顯示一個,然后我們依次讀取這些行,這樣就能把指定目錄下的文件依次賦給變量$line,然后使用變量$line就行了。
其他情況下對于帶有空格情況的處理方式就是對變量加上雙引號:
如 rm -r "$a"
3. 統計目錄下文件的數目
(1)查看文件夾下的文件個數(當前目錄的文件數)
?ls?? -l?? |grep?? "^-"?? |?? wc?? -l? ?
說明:
?ls?? -l?? 長列表輸出該目錄下文件信息(注意這里的文件,不同于一般的文件,可能是目錄、鏈接、設備文件等)? ?
grep?? ^-?? 這里將長列表輸出信息過濾一部分,只保留一般文件,如果只保留目錄就是?? ^d? ?
wc?? -l?? 統計輸出信息的行數,因為已經過濾得只剩一般文件了,所以統計結果就是一般文件信息的行數,又由于一行信息對應一個文件,所以也就是文件的個數。
(2)查看文件夾下的所有文件個數(當前目錄的文件和子文件夾的文件數)
find?? ./?? -type?? f?? |?? wc?? -l
或者
ls?? -lR|grep?? "^-"|wc?? -l
4.? 在一個目錄中搜索某個字符串, 使用grep的-r命令, 即 grep -r string $dirpath
5. gcc 中需要在編譯的時候加上一個預定義的宏的話需要使用命令-D, 即:gcc -DMYDEBUG -g -o a1 a.c
6. 我們平時使用Linux的時候經常遇到這樣一個問題,舉例有這樣一種情況:執行命令
$ cp /etc/apt/sources.list /etc/apt/sources.list.bak
這 里面有個問題,明明 /etc/apt/sources 這幾個字都是一樣的,為什么要打兩遍?這樣的還算短了,要是更深層的目錄,那花的力氣可就大了。跟上面例子很相似的情況是:在備份一個文件,重命名一個文 件,或是創建一個鏈接,都要進行類似的操作,重復一個相同的路徑。通常比較明智的做法是先 cd 到那個目錄,然后在那個目錄下進行操作,完后再 cd 回來。不過這樣做還是比較麻煩,有沒有足不出戶的解決方法?答案是肯定的。
Bash 有個功能叫大括號擴展,大括號包圍的,用逗號隔開的參數會擴展為獨立的多個參數。具體一點,上面那個備份文件的例子可以寫成:
$ cp /etc/apt/sources.{list,list.bak}
Shell 在解釋時會自動將后面的參數擴展成兩個,就變成了和上面一樣的完整命令。這樣就實現了足不出戶操作,而前面那一串目錄只要打一次就行,連 cd 也免敲了。
再繼續簡化就是:
$ cp /etc/apt/sources.list{,.bak}
這樣逗號前面沒東西,那么參數就保持原來的不變,逗號后面的照樣擴展。
7.awk中的內置變量
FNR??????????????? 當前輸入文件的記錄數
FS????????????????? 字段分隔字符 (默認為: " ")
NF?????????????????? 當前記錄的字段數
NR????????????????? 在工作(job)中的記錄數
OFS??????????????? 輸出字段分隔字符(默認為: " ")
ORS??????????????? 輸出記錄分隔字符(默認為: "\n")
RS????????????????? 輸入記錄分隔字符(僅用于 gawk 與 mawk)
ARGC???????????? 命令行參數的數目
ARGIND????????? 命令行中當前文件在 ARGV 內的索引
CONVFMT?????? 數字轉換格式,默認為 %.6gd
ENVIRON????????? 包含當前 shell 環境變量的數組
FILEDWIDTHS??? 在分隔固定寬度的列表時,使用空白而不是 FS 進行分割的字段寬度列表
FILENAME????????? 當前輸入文件的文件名
IGNORECASE???? 在正則表達式和字符串匹配中不區分大小寫
OFMT???????????????? 數字的輸出格式
RLENGTH??????????? match 函數匹配到的字符串的長度
RSTART???????????? match 函數匹配到的字符串的偏移量
RT????????????? 記錄終結符,對于匹配字符或者用 RS 指定的正則,gawk 將 RT 設置到輸入文本
SUBSEP??????????????? 數組下標分隔符
8 shell中通配符與正則表達式的區別
通配符?? ?表達的含義?? ?正則表達式
*?? ?匹配 0 或多個字符?? ??? ?.*
??? ?匹配任意單一字符 ??? ?.
[a-z]?? ?匹配a-z中的任意單一字符 ?? ?[a-z]
[!a-z]?? ?匹配不在a-z中的任意單一字符,! 注意區別 ^?? ?[^a-z]
{string1,string2,...}?? ?匹配 sring1或string2其一字串?? ?string1|string2
通配符是系統級的,而正則表達式需要相關工具的支持: egrep, awk, vi, perl
9.讀取文件中的每一行的方法:
(1)在for循環中
#! /bin/bash
?IFS=" "
?n=0 ?
?for line in `cat /etc/passwd` ?
?do ?
???????? n=`expr $n + 1` ?
???????? echo -e "$n/t$line" ?
?done ?
?(2) while循環中
#! /bin/bash
n=0
while read line
do
??????? n=`expr $n + 1`
??????? echo -e "$n/t$line"
done < /etc/passwd?? ?#! /bin/bash
n=0
cat /etc/passwd | while read line
do???? ?
??????? n=`expr $n + 1`
??????? echo -e "$n/t$line"
done

while循環的方式要比for循環好,因為for循環對于一行中存在空格的情況處理的不好。
對于while循環和for循環的不同的地方是在循環控制上,while后跟的是一個條件語句,而for后面一般是“變量 in 名字列表”的形式
10. 向sed或awk中傳入參數的方法
sed -n "$rowS"','"$rowE"'p' mv.txt |awk -v colS1=$colS1 -v colS2=$colS2 -v colS3=$colS3 -v colS4=$colS4 '{print $colS1 $colS2 $colS3 $colS4}'
從上面可以看到sed與awk的不同,sed是類似將字符串進行組合的方法得到命令,而awk則使用-v選項來說明使用外部的變量來傳遞參數
?11.shell中同時對多個文件的讀寫
(1)一個文件分割成多個
有時需要提取文件中的一個或多個列元素生成新的文件,這一操作在Shell里很容易實現。比如有一個數據文件data,有三列信息:姓名、學號、班級。
??? redraiment 0612800134 0601
??? christine 0612800136 0601
??? zb    0612800229 0602
現在需要這個文件的第一列和第二列信息分別存到文件f1和f2中,可以用awk提取,也可以用下面這個簡單shell程序:

#!/bin/sh
while read f1 f2 f3
do
echo $f1 >> f1
echo $f2 >> f2
done

(2) 多個文件合并成一個文件
如果想把多個文件重新合并成一個多列文件,而不是追加到文件尾處。例如把上列中生成的f1和f2重新組成join.txt。這時需要同時操作多個文件,就 像C語言中用fopen同時打開多個文件,在shell里也是類似的。只是在shell里叫做“文件描述符”,用“0-9”十個數字表示。其中0、1、2 分別是系統的標準輸入、輸出、錯誤。“3-9”則由用戶只有使用。我們就可以任選兩個來重定向輸入。腳本如下:

#!/bin/sh
exec 3<f1
exec 4<f2
while read f1 <&3 && read f2 <&4
do
echo $f1 $f2 >> join.txt
done

這兒其實也告訴我們如何同時讀取多個文件的方法。

轉載于:https://www.cnblogs.com/xkfz007/archive/2012/02/02/2336332.html

總結

以上是生活随笔為你收集整理的我学shell程序的记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。