저는 bash 스크립팅의 세계를 처음 접했고 도움이 필요합니다. 스크립트에 특정 명령줄 입력을 제공할 때 변수를 1씩 늘리고 싶습니다. 다른 명령줄 입력을 제공할 때는 변수를 1씩 줄이고 싶지만 감소량이 아래로 내려가는 것을 원하지 않습니다. 영. 나는 무엇을 해야 합니까?
내 사고방식은 대략 이렇다. 0 기반 카운터와 명령줄 입력을 읽을 수 있는 방법이 필요합니다. 그런 다음 두 개의 if 문이 입력과 개수를 확인하고 둘 다 유효한 경우 증가 또는 감소합니다.
count=0
read input
if(input == "in" && count >= 0)
let "count++"
if(input == "out" && count > 0)
let "count--"
echo $count
하지만 저는 bash를 처음 접했기 때문에 구문이 확실하지 않습니다. 나는 올바른 길을 가고 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.
답변1
스크립팅에 대한 기본 가이드를 읽어보세요. 유감스럽게도 귀하의 구문이 완전히 잘못되었습니다. 이렇게 하면 무작위로 시도하는 대신 구문을 읽는 데 많은 시간이 절약됩니다. 구문 중 일부가 모호하다는 것을 알고 있지만 맹목적으로 언어를 작성하기 전에 먼저 읽어보고 싶을 것입니다. 모든 언어에는 고유한 구문이 있으며 그것이 무엇인지 추측하려고 해도 큰 도움이 되지 않습니다.
첫째, if
bash의 명령문은 fi
. 그런 다음 조건 주위에 괄호 대신 [ ]
또는가 필요합니다 . 다음 사항도 필요합니다 : . 다음으로, 따옴표로 묶인 문자열( )을 추가해 보세요 . 이 연산자는 산술 문맥에서 작동하므로 블록이나 내장 함수에서 작동하지만 내부적으로 는 대신 그렇게 해야 합니다 (참고자료 참조 ).[[ ]]
if
then
if [ condition ]; then action; fi
let "count++"
"count++"
>=
(( ))
let
declare
if
-ge
help test
다음은 스크립트의 작업 버전입니다.
#!/bin/bash
count=0
read -p "Input:" input
if [[ $input = "in" && $count -ge 0 ]]; then
let count++
elif [[ $input = "out" && $count -gt 0 ]]; then
let count--
fi
echo $count
물론 이것은 값으로 시작 0
하고 스크립트가 한 번만 실행되기 때문에 실제로 감소에는 작동하지 않습니다. 따라서 입력의 합이 0보다 큰 out
상황 은 결코 발생하지 않습니다. $count
어쩌면 루프에서 실행하려고 생각하고 있습니까?
#!/bin/bash
count=0
while true; do
read -p "Input:" input
if [[ $input = "in" && $count -ge 0 ]]; then
let count++
elif [[ $input = "out" && $count -gt 0 ]]; then
let count--
fi
echo "$count"
done
Ctrl+ 로 죽일 때까지 계속 실행됩니다 C.