1. 程式人生 > >在shell指令碼中使用ls命令的注意事項

在shell指令碼中使用ls命令的注意事項

請對比如下兩個測試:

$ for i in `ls /etc`;do echo $i;done
adjtime
adobe
appstream.conf
arch-release
asound.conf
avahi
bash.bash_logout
bash.bashrc
bind.keys
binfmt.d
......
$ for i in /etc/*;do echo $i;done
/etc/adjtime
/etc/adobe
/etc/appstream.conf
/etc/arch-release
/etc/asound.conf
/etc/avahi
/etc/bash.bash_logout
/etc/bash.bashrc
/etc/bind.keys
/etc/binfmt.d
......

像ls這樣的命令很多時候是設計給人用的,它的很多顯示是有特殊設定的,可能並不是純文字。
比如可能包含一些格式化字元,也可能包含可以讓終端顯示出顏色的標記字元等等。
當我們在程式裡面使用類似這樣的命令的時候要格外小心,說不定什麼時候在什麼不同環境配置的系統上,
你的程式就會有意想不到的異常出現,到時候排查起來非常麻煩。
所以這裡我們應該儘量避免使用ls這樣的命令來做類似的行為,用萬用字元可能更好。

當然,如果你要操作的是多層目錄檔案的話,那麼ls就更不能幫你的忙了,它遇到目錄之後顯示成這樣:

$ ls /etc/*
/etc/adobe:
mms.cfg

/etc/avahi:
avahi-autoipd.action  avahi-daemon.conf  avahi-dnsconfd.action  hosts  services

/etc/binfmt.d:

/etc/bluetooth:
main.conf

/etc/ca-certificates:
extracted  trust-source

所以遍歷一個目錄還是要用兩個連續的**,如果不是bash 4.0之後的版本的話,可以使用find。
我推薦用find,因為它更通用。
有時候你會發現,使用find之後,絕大多數原來需要寫指令碼解決的問題可能都用不著了,一個find命令解決很多問題

相關推薦

shell 指令碼獲取命令的輸出

這個主要介紹的方法是獲取命令的輸出內容,而不是命令執行成功與否的返回值。 通常情況下,在shell指令碼中需要獲取命令的輸出內容,然後根據輸出內容判斷下一步的執行操作。 比較常用的一種方式就是, 匹配命令輸出的內容中是否存在某些關鍵字,選擇執行的不同動作。 比較常用的一種方式就是

解決 shell指令碼SCP命令需要輸入密碼的問題

本文轉自:https://blog.csdn.net/u012454773/article/details/72779439 使用金鑰檔案,兩臺機器建立信任 這裡假設主機A(192.168.100.3)用來獲得主機B(192.168.100.4)的檔案。 在主機A上執行如下命令來生成配對金鑰:

linux下shell指令碼sed命令使用變數

用linpack做測試,寫了一個指令碼, 因為每次可修改的引數寫在了配置檔案裡,所以腳本里用sed命令來修改配置檔案#測試次數echo “Input Number of tests:”read numt#每次測試的資料規模,測試次數有多少次,這裡應該又多少組數字,中間以空格隔

Shell指令碼cd命令使用

在寫shell指令碼的時候發現cd切換目錄的時候無法切換,程式碼是下面的。 #!/bin/bash #changedir.sh cd /home/firefox pwd我仔細一想,我執行的時候是./changedir.sh來執行的,這樣執行的話終端會產生一個子shell,子

Linux shell指令碼執行命令結果賦值給變數&&echo輸出變數是否包含換行符的問題

Linux shell指令碼中執行命令結果賦值給變數&&echo輸出變數是否包含換行符的問題 echo $ret 和 echo "$ret" 區別: 如果是echo $ret,輸出結果為一行,沒有換行符 如果是echo "$ret",輸出結果為多行,有換行符

shell指令碼cd命令無效的解決方案

在學習的時候,經常要切換到固定的資料夾,於是寫了個shell指令碼用cd命令切換卻發現目錄切換不了。 程式碼如下: #! /bin/bash # c.sh cd /mnt/hgfs/vmsha

linux shell指令碼cd命令無效的解決方法

      今天需要快速切換目錄,然後在sh腳本里面加入cd,但發現執行後無效。原因就不深究了。然後查了一下,有三種解決方案。       方案一、source ./    格式   例如:so

Shell指令碼make命令的使用

    (最近開發的專案中需要編寫Shell指令碼對整個工程進行自動化編譯,即在Shell

shell指令碼使用ls命令注意事項

請對比如下兩個測試: $ for i in `ls /etc`;do echo $i;done adjtime adobe appstream.conf arch-release asound.conf avahi bash.bash_logout bas

Shell 指令碼的檔名匹配和命令執行

理解下 shell 指令碼中的檔名匹配和命令執行的順序與結果。我們學習這個的目的是可以熟悉的在 shell 指令碼中寫出快速的找到檔案的命令。它可以匹配檔名中的任何字串,匹配檔名中的單個字元以及匹配檔名中的字母或數字符號。         首先我們來看看匹配檔案的符號

linux的shell指令碼執行多個命令的方法

第一種是以分號(;)進行劃分:表示:各命令的執行的果,不會影響其它命令的執行。換句話說,各個命令都會執行,但不保證每個命令都執行成功。 第二種命令之間&&隔開 表示:若前面的命令執

shell指令碼使用getopts處理多命令列選項

在Linux系統中,許多命令都提供了選項,使用不同的選項就會得到不通的執行結果例如:ls命令,ls命令提供了多個選項:-l、-a、-A、-h、-i等等,每個選項具有不同的功能,我們自己寫指令碼時也可以定義選項,提示使用者如何使用,本文介紹如何使用getopts命令來處理命令選

shell 指令碼獲取執行系統命令的輸出結果

這個主要介紹的方法是獲取命令的輸出內容,而不是命令執行成功與否的返回值。通常情況下,在shell指令碼中需要獲取命令的輸出內容,然後根據輸出內容判斷下一步的執行操作。比較常用的一種方式就是, 匹配命令輸出的內容中是否存在某些關鍵字,選擇執行的不同動作。比較常用的一種方式就是採

shell指令碼如何呼叫hadoop 命令

我們在shell指令碼中可能會用到hadoop或者其他命令,而這些命令可能是一個整體,如果我們只是簡單的寫入到shell指令碼中,可能會被分解成其他的各個子欄位,即有可能會分成兩部分去執行,這樣就會導致命令執行失敗。 hadoop fs -get /XX

十六週二次課 2018.02.05 shell指令碼介紹、shell指令碼結構和執行、date命令用法、shell指令碼的變數

20.1 shell指令碼介紹微信公眾號部落格,20.2 shell指令碼結構和執行建立目錄,然後我們進去在裡面寫指令碼第一行是他表示接下來的命令是通過這一個直譯器操作解析的的,通常都是/bin/bash(如果你是在本機上執行那麼不用寫也行,因為它知道接下來的命令能夠在這臺機

linux利用shell指令碼條件執行命令

在linux環境中,我們總會有一些命令需要經常用,例如經常跳轉到某些目錄下或者執行某些命令,輸入一連串的命令是很煩的,此時我們可以預先寫一些指令碼然後根據我們的選擇自動執行命令,那豈不是完美,本指令碼就是為此而生的(以跳轉不同的目錄舉例,當然也可以執行其他命令,

java Runtime.getRuntime().exec 呼叫系統指令碼/命令注意事項

錯誤的方法: //CPUID private static final String cpuid="dmidecode -t processor | grep 'ID' | head -1"; Process p = Runtime.getRuntime().exec

Shell】關於shell指令碼執行cd命令無效的分析

###Date: 2017/1/7 ###Author: SoaringLee ###Content:關於shell指令碼中執行cd命令無效的分析 ===========================================================

20.1 shell指令碼介紹 20.2 shell指令碼結構和執行 20.3 date命令用法 20.4 shell指令碼的變數

20.1 shell指令碼介紹20.2 shell指令碼結構和執行20.3 date命令用法20.4 shell指令碼中的變數shell指令碼介紹shell是一種指令碼語言可以使用邏輯判斷、迴圈等語法可以自定義函式shell是系統命令的集合shell指令碼可以實現自動化運維,

Shell 指令碼跟蹤除錯命令的執行

shell 指令碼除錯系列 本系列的前面部分清晰地闡明瞭另外兩種 shell 指令碼除錯模式:詳細模式和語法檢查模式,並用易於理解的例子展示瞭如何在這些模式下啟用 shell 指令碼除錯。 概述 shell 跟蹤簡單的來說就是跟蹤 sh