2015-02-07 6 views
0

해결 방법을 찾지 못해서 누군가 도와 드릴 수 있습니까? 내가 잘 작동 다음 스크립트가 있습니다실행 된 명령에 BASH 스크립트 변수 사용

#!/bin/bash 

#Checks the number of lines in the userdomains file 

NUM=`awk 'END {print NR}' /etc/userdomains.hristian`; 

echo $NUM 


#Prints out a particular line from the file (should work with $NUM eventually) 

USER=`sed -n 4p /etc/userdomains.hristian` 

echo $USER 


#Edits the output so that only the username is left 

USER2=`echo $USER | awk '{print $NF}'` 

echo $USER2 

는 그러나, 나는 변수 $ NUM에 맞춰 12 일에 4를 대체를 다음과 같이 작동하지 않습니다 :

USER=`sed -n $NUMp /etc/userdomains.hristian` 

내가 시도 따옴표와 $ {}의 여러 가지 조합이 있습니다. 그러나 BASH의 초보자이기 때문에 아무 것도 작동하지 않는 것 같습니다. 난 당신이 이미 시도했습니다 정확히 모르겠어요

+0

당신은 모든 조합을 시도하지 않았다'사용자는 = \ '$ {NUM} P는 /etc/userdomains.hristian의 \''-n 나오지. 참고 사항 : _ 배쉬에서 대문자 변수 이름을 사용하지 마십시오! 여기 잘못하고 있습니다 : '사용자'는 시스템에서 변수 집합과 사용 가능성이 매우 높습니다. 조만간 충돌 할 수 있습니다! 보너스 메모 : backticks를 사용하지 말고 대신'$ (...) '를 사용하십시오 :'USER = $ (sed -n $ {NUM} p /etc/userdomains.hristian)'. –

+1

파일의 마지막 줄을 인쇄하려고합니까? 그렇다면'tail -n1/etc/userdomains.hristian'이 작업을보다 효율적으로 수행 할 것입니다. –

+0

분명히 마지막 행의 마지막 필드. 그것을하는 가장 짧은 방법은 아마도'awk 'END {print $ NF}'/ etc/userdomains.hristian' 일 것이지만,'tail -n1 /etc/userdomains.hristian | awk '{print $ NF}'는 큰 파일에 더 효율적입니다. – Wintermute

답변

2

을 :) 제발 도와 그러나 이것은 나를 위해 작동 :

$ cat out 
line 1 
line 2 
line 3 
line 4 
line 5 
$ num=4 
$ a=`sed -n ${num}p out` 
$ echo "$a" 
line 4 

이 명확하게하기 위해, 여기에 문제는 $num의 확장을 분리 할 필요가있다 sed 명령의 p에 있습니다. 그것은 중괄호가하는 일입니다. 소문자 변수 이름을 사용하고 있습니다. 대문자는 쉘이 사용하도록 예약해야합니다.

a=$(sed -n "${num}p" out) 

나오지 명령 주위에 따옴표가 필요하지 않습니다하지만 그들은 어떤 해를하지 않는다 : 나는 또한 명령 교체를 더 현대적인 $() 구문을 사용하는 것이 좋습니다 것입니다. 일반적으로 확장에 사용하는 것이 좋습니다.

아마도 귀하의 질문에있는 스크립트는 학습 연습이므로 모든 단계를 개별적으로 완료 한 것입니다. 기록을 위해, 당신은 다음과 같이 한 번에 모든 일을 할 수있는 다음 END 블록에서

awk 'END { print $NF }' /etc/userdomains.hristian 

는, 파일의 마지막 줄에서 값이 여전히 액세스 할 수 있습니다, 당신이 직접 마지막 필드를 인쇄 할 수 있습니다 .

+1

오, 내 작품. 정보 및 추천을 해주셔서 대단히 감사합니다. 참고 사항. – Neekoy

1

$NUM이 아닌 변수 $NUMp을 평가하려고했습니다. 대신이 시도 :

USER=`sed -n ${NUM}p /etc/userdomains.hristian`