2017-04-02 2 views
-1

셸 스크립트를 실행하려고했지만 문제가 발생했습니다. 나는 인수를 제공 할 때 특정 코드 집합을 실행하고 나머지는 실행해야합니다. 인수를 전달하지 않으면됩니다. 내가 인수로 실행하려는 부 : 나는 문제가 믿는 모든 인수 Linux의 명령 줄 인수가없는 셸 스크립트 실행

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 

없이

#!/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 

이 부분은 루프 조건이지만, 내가 무엇을 이해하지 못할?

답변

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을 실행하는 것이 좋습니다. 이런 식으로 프랑스 로케일 인 경우 fdiskDisque이라고 말합니다.

+0

감사합니다. 내 논리가 실패한 이유를 설명해 주시겠습니까? – Ismail

+0

게시 된 코드가 완전한 스크립트라고 가정하면 첫 번째 부분 '$ #'이 처음부터 0이거나 모든 인수가 'shift'된 것이므로 분명히 두 번째 부분은 무조건 실행됩니다. – AlexP

+0

설명해 주셔서 감사합니다. – Ismail