linu中編寫shell指令碼將指定目錄中的檔案的文

2021-08-10 23:09:27 字數 4975 閱讀 5642

1樓:匿名使用者

bash shell

指令碼的方法有多種,現在作個小結。假設我們編寫好的shell指令碼的檔名為hello.sh,檔案位置在/data/shell目錄中並已有執行許可權。

方法一:切換到shell指令碼所在的目錄(此時,稱為工作目錄)執行shell指令碼:

複製**

**如下:

cd /data/shell

./hello.sh

./的意思是說在當前的工作目錄下執行hello.sh。

如果不加上./,bash可能會響應找到不到hello.sh的錯誤資訊。

因為目前的工作目錄(/data/shell)可能不在執行程式預設的搜尋路徑之列,也就是說,不在環境變數pash的內容之中。檢視path的內容可用

echo $pash 命令。現在的/data/shell就不在環境變數pash中的,所以必須加上./才可執行。

方法二:以絕對路徑的方式去執行bash shell指令碼:

複製**

**如下:

/data/shell/hello.sh

方法三:直接使用bash 或sh 來執行bash

shell指令碼:

複製**

**如下:

cd /data/shell

bash hello.sh

或複製**

**如下:

cd /data/shell

sh hello.sh

注意,若是以方法三的方式來執行,那麼,可以不必事先設定shell的執行許可權,甚至都不用寫shell檔案中的第一行(指定bash路徑)。因為方法三是將hello.sh作為引數傳給sh(bash)命令來執行的。

這時不是hello.sh自己來執行,而是被人家呼叫執行,所以不要執行許可權。那麼不用指定bash路徑自然也好理解了啊,呵呵……。

方法四:在當前的shell環境中執行bash shell指令碼:

複製**

**如下:

cd /data/shell

. hello.sh

或複製**

**如下:

cd /data/shell

source

hello.sh

前三種方法執行shell指令碼時都是在當前shell(稱為父shell)開啟一個子shell環境,此shell指令碼就在這個子shell環境中執行。shell指令碼執行完後子shell環境隨即關閉,然後又回到父shell中。而方法四則是在當前shell中執行的。

2樓:

將你的指令碼貼出來看看

linux如何查詢以某個字母打頭的檔案或資料夾 比如,/etc目錄下很多檔案,我想列出所有以c開頭的檔案或檔案

3樓:一隻愛流淚的納

ls -al |grep c* 這樣就可以了,運用管道命令|。

如何使用命令列在linux中查詢檔案和資料夾

1使用查詢命令,“find”命令允許您搜尋知道近似檔名的檔案。該命令的最簡單形式在當前目錄中搜尋檔案,並遞迴地通過其與所提供的搜尋條件匹配的子目錄。您可以按名稱,所有者,組,型別,許可權,日期和其他條件搜尋檔案。

在提示符下鍵入以下命令將列出當前目錄中的所有檔案。

“find”後的點表示當前目錄。

2要查詢符合特定模式的檔案,請使用-name引數。您可以使用檔名元字元(例如*),但您應該將一個轉義字元(\)放在每個字元之前或將它們括在引號中。

例如,如果要在documents目錄中找到以“pro”開頭的所有檔案,我們將使用該cd documents/命令更改為documents目錄,然後鍵入以下命令:

find . -name pro\*

列出以“pro”開頭的當前目錄中的所有檔案。

注意:find命令預設為區分大小寫。如果要搜尋單詞或短語不區分大小寫,請使用-inamefind命令中的選項。這是-name命令的不區分大小寫的版本。

3如果find沒有找到符合條件的任何檔案,則不會產生任何輸出。

4使用定位命令

locate命令比find命令更快,因為它使用了先前構建的資料庫,而find命令通過所有實際目錄和檔案在實際系統中進行搜尋。locate命令返回包含指定字元組的所有路徑名的列表。

資料庫從cron定期更新,但您也可以隨時更新資料,以便您可以獲得最新的結果。為此,請在提示符下鍵入以下命令:

sudo updatedb

出現提示時輸入密碼。

5locate命令的基本形式從檔案系統中找到包含搜尋條件全部或部分內容的所有檔案。

locate mydata

例如,上面的命令發現了兩個包含“mydata”的檔案和一個包含“資料”的檔案

如果要查詢包含完全唯一的搜尋條件的所有檔案或目錄,請使用-blocate命令中的選項,如下所示。

locate-b'\ mydata'

上述命令中的反斜槓是一個globbing字元,它提供了將非特定檔名中的萬用字元擴充套件成一組特定檔名的方法。萬用字元是表示式被評估時可以被一個或多個字元替換的符號。最常見的萬用字元是問號(?

),它表示單個字元,而asterisk(*)表示連續的字串。在上面的例子中,反斜槓禁用“* mydata *”隱式替換“mydata”,所以最終只能包含“mydata”的結果。

mlocate命令是一個新的locate的實現。它索引整個檔案系統,但搜尋結果只包含當前使用者可訪問的檔案。更新mlocate資料庫時,它會在資料庫中保留時間戳資訊。

這允許mlocate知道目錄中的內容是否更改,而不再讀取內容,並使資料庫更新速度更快,對硬碟驅動器的要求也更低。

當您安裝mlocate時,/ usr / bin / locate二進位制檔案更改為指向mlocate。要安裝mlocate,如果尚未包括在linux發行版中,請在提示符下鍵入以下命令。

sudo apt-get install mlocate

注意:我們將在本文後面顯示一條命令,允許您確定命令的可執行檔案所在的位置(如果存在)。

mlocate命令不使用與標準locate命令相同的資料庫檔案。因此,您可能需要在提示符下鍵入以下命令手動建立資料庫:

sudo /etc/cron.daily/mlocate

在資料庫手動建立資料庫或從cron執行指令碼之前,mlocate命令將不起作用。

有關locate或mlocate命令的詳細資訊,請鍵入man locate或man mlocate  在“終端”視窗中,然後按enter鍵。兩個命令顯示相同的幫助螢幕。

6使用哪個命令

“which”命令返回發出命令時呼叫的可執行檔案的絕對路徑。這在找到用於在桌面,面板或桌面管理器中的其他位置建立程式的快捷方式時可用於查詢可執行檔案的位置。例如,鍵入命令將which firefox 顯示下圖中顯示的結果。

預設情況下,哪個命令只顯示第一個匹配的可執行檔案。要顯示所有匹配的可執行檔案,請使用-a以下命令的選項:

這是一個firefox

您可以一次搜尋多個可執行檔案,如下圖所示。只顯示找到的可執行檔案的路徑。在下面的例子中,只發現了“ps”可執行檔案。

注意:哪個命令只搜尋當前使用者的path變數。如果搜尋只能作為普通使用者使用的root使用者的可執行檔案,則不會顯示任何結果。

有關哪個命令的更多資訊,請在終端視窗中的命令提示符下鍵入“man which”(不帶引號),然後按enter鍵。

7使用whereis命令

whereis命令用於查詢命令的二進位制檔案,原始檔和手冊頁檔案所在的位置。例如,whereis firefox 在提示符下輸入將顯示如下圖所示的結果

如果您只想要顯示可執行檔案的路徑,而不是源和路徑(man(頁)),請使用該-b選項。例如,該命令whereis -b firefox將僅顯示/usr/bin/firefox為結果。這很方便,因為您可能會比搜尋該程式的源頁面和手冊頁更頻繁地搜尋程式的可執行檔案。

您也可以僅搜尋原始檔(-s)或僅搜尋手冊頁(-m)。

有關whereis命令的詳細資訊,請鍵入man whereis 終端視窗,然後按enter鍵。

8瞭解whereis命令與哪個命令之間的區別

whereis命令顯示命令的二進位制,源和手冊頁的位置,而哪個命令僅顯示命令的二進位制檔案的位置。

whereis命令搜尋二進位制,源和man檔案的特定目錄列表,而哪個命令搜尋當前使用者的path環境變數中列出的目錄。對於whereis命令,可以在命令的手冊頁的files部分中找到具體目錄的列表。

當涉及預設顯示的結果時,whereis命令顯示它找到的所有內容,而哪個命令只顯示找到的第一個可執行檔案。您可以使用-a前面討論過的選項來更改該命令。

因為whereis命令只使用硬編碼到命令中的路徑,所以您可能並不總是找到您要查詢的內容。如果您正在搜尋一個程式,則認為可能安裝在whereis命令的手冊頁中未列出的目錄中,您可能希望使用該-a選項以查詢系統中所有出現的命令,

4樓:匿名使用者

sudo find / -iname c*

-iname是不分大小寫

-name是分大小寫

5樓:匿名使用者

linux系統下,怎麼設定某一使用者遠端登入只能訪問根目錄下的某個資料夾目錄或多把可訪問的目錄賦予對應的許可權即可 如果是ftp,在/etc/ftpusers中設定,rrckiw

6樓:匿名使用者

1. echo c*

2. ls c*

7樓:匿名使用者

ls -al |grep c* 這樣就可以了,運用管道命令|,還有什麼問題可以再問我,多交流。。。。

linux中用grep查詢一個以大寫字母開頭中間兩個任意然後數字命名的檔案

8樓:匿名使用者

ls|grep '^[a-z]..[0-9]\+'

這樣即可。

任意要以前兩個開始,

後面數字包含至少一個數字

如果後面數字結尾的。

ls|grep '^[a-z]..[0-9]\+$'

9樓:

後面應該使用+號,不是*號:

ls |grep '[a-z]..[0-9]\+'

在linu系統下編寫shell指令碼從鍵盤讀入

bin bash read num max num min num for i 1 i 10 i doread num if test max le numthen max num fiif test min ge numthen min num fidone echo max max,min mi...

編寫shell指令碼,編寫一個shell指令碼

ip ifconfig grep inet addr awk f awk head 1 echo 本機ip是 ip iplist echo ip awk f.for k in docheckip iplist k echo check checkip tmp ping c1 checkip grep...

shell指令碼中,怎樣比較引數是否與某字串匹配

if test 1 delete then fi第一個引數用 1 來取得。bin bash read p 請輸入引數 aa if aa delete then rm rf xxfi沒測試 印象裡這樣應該沒問題 請教shell指令碼里如何進行字串匹配 比如來說傳入的源 引數bai是str tmpstr...