해결해야 할 문제가 있습니다. 저는 AWS 터미널에서 권한을 수정하는 것 외에 직장에서 Linux를 거의 사용하지 않기 때문에 지식이 많지 않습니다. 나 역시 오랫동안 검색을 해봤지만, 효과가 있을 것이라고 생각했던 모든 것이 효과가 없다는 것을 발견했다. 저는 Ubuntu를 사용하고 있으며 간단한 쉘 스크립트를 만들고 bash를 사용하여 실행했습니다.
읽기에서 사용자 정수 입력을 얻은 다음 for 루프에서 각 숫자를 개별적으로 사용하는 방법이 있습니까? 예를 들어, 명령을 읽고 공백으로만 구분된 3 4 45 5를 입력하면 각 명령을 개별적으로 반복하여 합계에 모두 추가할 수 있습니까?
동일한 루프에서 파일을 사용하는 것은 어떻습니까? 3 4 45 5 한 줄에 동일한 값을 담고 있는 file.txt가 있는 경우 값을 반복하여 함께 추가하는 동일한 기능을 수행할 수 있나요?
for 루프에서 변수를 사용하는 올바른 형식은 무엇입니까? 다음 내용이 맞나요? 다양한 방법으로 봤습니다.
#this is what I was trying
read var
sum = 0 #even the sum doesn't seem to work I dont see a different way to declare a number though
for i in '${var[0]}'
do
$((sum += i)) #confused here also have seen ('$sum' += '$i')
done
echo '$sum'
이번에도 파일을 가지고 하려는데 변수 대신 파일을 사용하고 있습니다.
files = "/Documents/numbers.txt"
for i in $files
너무 간단해서 죄송합니다. 하지만 몇 년 전 학교에서 저는 기본을 제외한 대부분의 일에 완전히 새로운 사람이었습니다.
답변1
read var
sum = 0
sum=0
공백 없이 이어야 합니다 . 다음을 참조하세요.쉘 스크립트에서 변수 할당의 공백
for i in '${var[0]}'
"${var[0]}"
리터럴 문자열을 가져오는 대신 변수를 확장하려면 큰따옴표를 사용하세요. 다음을 참조하세요."...", '...', $'...' 및 $"..." 따옴표의 차이점은 무엇입니까?
인덱싱은 스칼라 변수가 하나만 있기 때문에 다소 혼란스럽기는 하지만( 다른 인덱스 ${var[0]}
와 동일 $var
하지만 null 값을 제공함) for i in "$var"
.
$((sum += i))
이는 작동하지만 쉘이 이를 명령으로 실행하려고 시도하는 결과까지 확장됩니다. 비슷한 오류가 발생합니다 bash: 3: command not found
. ((sum += i))
(달러 기호 없이) 또는 를 사용하여 sum=$((sum + i))
다음을 확인하세요.https://mywiki.wooledge.org/BashGuide/CompoundCommands#Arithmetic_Evaluation
echo '$sum'
var
와 동일합니다 echo "$sum"
.
명령을 읽고 공백으로만 구분된 3 4 45 5를 입력하면 각 명령을 개별적으로 반복하여 합계에 모두 추가할 수 있습니까?
넌 할 수있어
read var
for x in $var; do ...
이번에는 따옴표가 없습니다.
이는 결과적으로 인용되지 않은 변수를 분할하는 쉘에 의존합니다.일반적으로 이 작업은 피해야 합니다. 오류의 원인이 됩니다.. 파일 이름 글로빙도 발생합니다. 예를 들어 사용자가 이를 입력하면 *
현재 디렉터리의 모든 파일로 확장됩니다. 바라보다:공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까?그리고https://mywiki.wooledge.org/WordSplitting
files = "/Documents/numbers.txt"
먼저 공백을 다시 제거하십시오. 그런 다음 변수에 파일 이름을 할당합니다. 쉘은 실제로 파일을 읽으려는 의도를 추측할 수 없습니다. 이를 수행하려면 명령을 실행하고 출력을 저장하라고 명시적으로 지시해야 합니다(단순히 화면에 인쇄하는 대신). 이와 같이: files=$(cat "/Documents/numbers.txt")
.
$((sum + i))
숫자를 포함하지 않으면 arithmetic( )이 이상한 일을 하고 임의의 명령을 실행하도록 속일 수도 있으므로 실제 생활에서는i
~해야 한다입력에 숫자만 포함되어 있는지 확인합니다. 다음을 참조하세요.쉘 산술 평가에서 정리되지 않은 데이터 사용의 보안 영향