2017-04-02 152 views
-1

我想運行一個Shell腳本,但遇到了問題。我想運行某些代碼集,當我提供參數和剩餘應該運行,如果我不通過任何參數。 我想與ARGS運行部分:在Linux中沒有命令行參數的情況下運行Shell腳本

#!/bin/bash 
while [[ "$1" != "" ]]; do 
case "$1" in 
    -c) cat /proc/cpuinfo | grep cores 
      ;; 
    -d) fdisk -l | grep Disk | awk '{print $1,$2,$3,$4}' #fdisk -l 2> /dev/null | grep Disk | grep -v identifier 
      ;; 
    esac 
shift 
done 

,這部分沒有任何ARGS

while [[ $# -eq 0 ]]; do 
echo PART 2 $# 
cat /proc/cpuinfo | grep cores 
fdisk -l | grep Disk | awk '{print $1,$2,$3,$4}' #fdisk -l 2> /dev/null | grep Disk | grep -v identifier 
break 
done 

我相信問題是與循環條件,但我不能明白什麼?

回答

1
if [[ -n "$1" ]]; then 
    # 
    # "$1" is not empty. This is the part which runs when one or more 
    # arguments are supplied. 
    # 
    while [[ -n "$1" ]]; do 
    case "$1" in 
    -c) cat /proc/cpuinfo | grep cores 
     ;; 
    -d) LC_ALL=C fdisk -l | grep Disk | awk '{print $1,$2,$3,$4}' 
     #LC_ALL=C fdisk -l 2> /dev/null | grep Disk | grep -v identifier 
     ;; 
    esac 
    shift 
    done 
    exit 
fi 
# 
# "$1" is empty. The following code runs when no arguments are supplied. 
# 
echo PART 2 $# 
cat /proc/cpuinfo | grep cores 
LC_ALL=C fdisk -l | grep Disk | awk '{print $1,$2,$3,$4}' 
#LC_ALL=C fdisk -l 2> /dev/null | grep Disk | grep -v identifier 

注1:未經測試。注意2:每當您覺得需要解析查找特定單詞或短語的命令的輸出時,最好在默認語言環境中運行命令,前綴爲LC_ALL=C。通過這種方式,您在法語語言環境中不會感到驚訝,例如,fdisk表示Disque ...

+0

感謝您的回覆......您能解釋爲什麼我的邏輯失敗了嗎? – Ismail

+0

假設發佈的代碼是完整的腳本,那麼明顯在第一部分'##'後總是爲零,或者是因爲它從一開始就是零,或者因爲你有'shift'所有參數,所以第二部分無條件運行。 – AlexP

+0

感謝您的解釋。 – Ismail

相關問題