2014-05-17 6 views
0

스크립트에 문제가 있습니다. test.cfg 파일이 없으면 올바른 암호가 test.cfg 파일에 기록되지만 test.cfg 파일이 있으면 암호가 설정됩니다. 변경되지 않습니다. 여기 sed와 큰 따옴표

는 test.cfg가 존재하지 않습니다

#!/bin/bash 
while test $# -gt 0; do 
    case "$1" in 
     "-password") 
     password="$2" 
     shift 
    ;; 
    esac 
shift 
done 

grep "password = " test.cfg &>/dev/null 
if [[ $? -eq 0 ]]; then # Vorhanden! 
    sed -i test.cfg -e "s/^\(password = \).\"*$/\1${password}\";/" 
else # Nicht vorhanden! 
    echo "password = \"${password}\";" >> test.cfg 
fi 

내용

password = "mysecret"; 

로 만든하지만 지금은 선이 그 존재한다 -password test.sh mysecret 내 스크립트입니다

: 암호 -password mynewsecret를 test.sh로 변경되지 않습니다

그것은 단지로 변경 얻을 것

password = mynewsecret; 
+0

암호를 실제로 일반 텍스트로 저장하지 않거나 (있는 경우) 보안을 중요하게 생각하지 않는다고 생각합니다. 암호는 단지 오용을 방지하기위한 단순한 보호 일뿐입니다. –

+0

이 암호는 gameserver를 보호하기위한 것입니다. 사용하고있는 인터페이스는 게임과 매우 호환되지 않습니다. 다른 hlds, srcds – GenXRoad

답변

1

\"*은 * 큰 따옴표를 0 번 이상 의미합니다. 두 개 이상의 가능성이있는 경우 case가 적합

sed -e "s/^\(password = \)\".*\"$/\1\"$password\";/" 

하는 것으로, 여기 if 더 적합 할 것입니다 :

while (($#)) ; do 
    if [[ $1 == '-password' ]] ; then 
     password=$2 
     shift 
    fi 
    shift # What does this do, anyway? 
done 

if grep -q 'password = ' test.cfg ; then 
    sed -i~ -e "s/^\(password = \)\".*\"$/\1\"$password\";/" test.cfg 
else 
    echo 'password = "'"$password"'";' >> test.cfg 
fi 
+0

고마워요, 작동합니다. 두 번째 교대는 코드에 있습니다. 내가 문제가있는 부분은이 스크립트는 tekbase에 의해 관리되는 gameservers 용입니다. 그래서 내 친구들이 서버를 중지하고 시작할 수 있습니다. 내 서버에 대한 ssh 액세스가 필요 없기 때문에 코딩 기술이 매우 낮습니다. 나는 온라인에서 찾을 수 있지만 이러한 스크립트는 내가 찾지 못했기 때문에 나는 내 자신에 의해 그것을 시도했다. 나쁜 영어로 죄송합니다 (독일에서 – GenXRoad

0

문제는 교체한다는 것이다 당신은 조금 다른 정규 표현식이 필요합니다 문자열에는 제거한 큰 따옴표가 포함되지 않으며 코드가 예상 한 것과 일치하지 않습니다. 이것을 사용하면 첫 번째 \"이 올바른 위치로 이동합니다.

sed -i -e "s/^\(password = \).*$/\1\"${password}\";/" test.cfg 

제쳐두고 GNU sed을 사용해야합니다. Mac OS X sed-i에 인수가 필요하므로 sed: -i may not be used with stdin을 불평하므로 백업 파일에 추가 할 접미어로 test.cfg을 처리하므로 파일 이름 인수가 없으므로 표준 입력에서 읽습니다. GNU getopt(1) (또는 getopt_long(1))이 인터리빙 옵션과 옵션이 아닌 인수를 지원하더라도 옵션 인수를 비 옵션 인수 앞에 두는 것이 가장 좋습니다. 명령 줄을 적절하게 재정렬했습니다. Mac OS X에서는 여전히 작동하지 않습니다. 접미사는 -i과 함께 선택 사항이 아닙니다.

+0

고맙습니다. 이제 작동합니다. – GenXRoad