터미널을 사용하여 쉘 스크립트를 작성하는 방법은 무엇입니까?

터미널을 사용하여 쉘 스크립트를 작성하는 방법은 무엇입니까?

>>파일에 명령을 추가하는 완전한 쉘 스크립트를 작성하고 싶습니다 . 예를 들어, 편집기를 사용하여 작성된 것처럼 다음 스크립트를 고려하십시오.

echo Hello World, done
echo please enter the first number
read num1
echo please enter the second number
read num2
echo $num1 plus $num2 is `expr $num1 + $num2`

터미널 창에서 echo echo Hello World, "done" >> file.sh파일에 모든 줄을 쓰려고 입력을 시도했습니다. 파일을 실행할 때 터미널이 "done" 키워드를 고려하지 않도록 "done" 주위에 따옴표를 붙였습니다. 그러나 파일이 올바르게 수행되었는지 확인하면 "done" 키워드에 따옴표가 없습니다. 그리고 위 코드의 마지막 줄은 터미널 창에 입력하고 파일에 추가하면 파일이 모두 표시됩니다 . 왜 변수와 표현식이 파일에 추가되지 않는지 echo plus is궁금합니다 . expr기본적으로 터미널 창에서 위의 코드를 다시 만들고 싶습니다. Ubuntu 12.04를 실행 중이고 bash 버전은 4.2.24입니다.

답변1

훌륭합니다. 쉘은 파일에 추가하기 전에 문자를 해석합니다.

echo echo Hello World, "done" >> file.sh

쉘 해석 ", 표준에서 제거 echo. 따라서 이를 탈출해야 합니다.

echo echo Hello World, \"done\" >> file.sh

또는 더 간단하게는 전체 내용을 에 포함시킵니다 '.

echo 'echo Hello World, "done"' >> file.sh`

그렇게 말했는데 무슨 말인지 잘 모르겠네요

파일을 실행할 때 터미널이 "완료" 키워드를 고려하지 않는지 확인하세요.

donea 뒤의 A는 echo의미가 없습니다. 새 스크립트는 단일 텍스트만 인쇄합니다 done. 테스트해보세요!

마찬가지로,

echo $num1 plus $num2 is `expr $num1 + $num2`

쉘은 변수를 해석하고expr 앞으로파일에 첨부됩니다. 다시 말하지만, '.

echo 'echo $num1 plus $num2 is `expr $num1 + $num2`' >> file.sh

그렇게 말했는데, 왜 그런 짓을 하려는지 모르겠습니다. 그냥 텍스트 편집기를 사용하세요. '스크립트에서 텍스트를 사용 하려는 경우 이는 문제가 될 수 있습니다.

답변2

다음 구조를 시도해 보세요.

$ cat > file.sh << "EOF"
echo Hello World, done
read num1
echo please enter the second number
read num2
echo Sum of $num1 and $num2 is `expr $num1 + $num2`
EOF

처음부터 리눅스스크립팅부터 파일 생성까지 모든 것이 이 방법을 사용합니다. done재정의된 경우 EOFSparhawk에서 권장하는 대로 이스케이프 처리하는 것을 고려하세요.

답변3

리디렉션을 사용하여 터미널의 대화형 셸(셸 스크립트)에서 텍스트 파일을 만드는 가장 쉬운 방법은 다음을 수행하는 것입니다.

$ cat >filename

...그런 다음 원하는 텍스트를 붙여넣거나 입력을 시작합니다 ( >>대신>추가의이미 존재하는 파일로). 완료되면 을 누릅니다 Ctrl+D.

추가 보너스로, 쉘은 이런 방식으로 텍스트 파일에 붙여넣거나 입력한 내용을 달리 해석하지 않습니다. 한 줄 삽입 또는 여기에 여러 줄 삽입 문서를 사용하려는 경우 echo셸이 문서 콘텐츠에서 변수, 이스케이프 시퀀스 등을 확장하지 못하도록 올바른 따옴표를 사용하여 텍스트를 보호해야 합니다.

스크립트 내에서 스크립트를 생성하려면 여기에 참조된 문서를 사용하세요.

cat <<'END_SCRIPT' >filename
script
goes
here
END_SCRIPT

귀하의 질문에있는 문제는 단순히 echo줄 앞에 추가 할 때 추가 예방 조치를 취하지 않는 한 나머지 줄은 여전히 ​​​​쉘에 의해 해석된다는 것입니다.

관련 정보