LINUX당

LINUX shell programming : 간단한 한컴 타자 연습 구현

이히당 2024. 11. 20. 14:06

우선 몇 가지 기본 명령어를 복습하자

1. grep

활용1 : 입력이 ls -l 이고 여기서 앞이 d로 시작하는 문자열만 출력

ewha104@csn8:~$ ls -l | grep "^d"
drwx------ 3 ewha104 student 4096 10월 20 22:39 A
drwxr-xr-x 2 ewha104 student 4096 10월 30 12:57 C
drwx------ 2 ewha104 student 4096 11월 13 13:22 SECRET
drwxr-xr-x 2 ewha104 student 4096 10월 30 13:23 public_html
ewha104@csn8:~$

 

 

활용2 : 입력이 ls -l 이고 여기서 앞이 d로 시작하는 문자열의 개수를 출력

ewha104@csn8:~$ ls -l $1 | grep "^d" | wc -l
4

 

활용3 : 위의 내용을 변수에 할당 및 확인

ewha104@csn8:~$ A=`ls -l $1 | grep "^d" | wc -l`
ewha104@csn8:~$ echo $A
4
ewha104@csn8:~$

 

2. if문, for문

// 문자열 비교 if문
hello=hi
if[$hello=hi]
then echo "O"
else echo "X"
fi

// 산술연산
A=1
let A=$A+1
echo $A

// 백쿼트를 이용한 for 문
for A i `cat B`
do echo $A
done

 

3. 한컴타자연습기를 만들어봅시다.

Q="" 
count=0 
answer=0 
for A in `cat $1` 
do 
    let count=$count+1 
    echo $A 
    read -e Q 

    if [ $A = $Q ] 
    then echo '정답(O)' 
        let answer=$answer+1 
    else echo '땡(X)' 
    fi 

done 
echo `총$count문제 중 $answer문제를 맞추셨습니다.`
  • 값을 연산할 때에는 let키워드를 사용합니다.
    • 지역변수 전역변수 개념이 아니라, 연산을 할때 필요한 키워드다.
  • 값을 연산할 때 띄어쓰기는 하면 안된다. 즉 a + b 가 아니라 a+b이렇게 작성한다.
  • read -e 변수 한 줄을 표준입력으로 받아 변수에 할당한다.
    • 이때 변수앞에는 $를 붙이지 않는다. 이유는 그것이 문법이다.

하지만 이렇게 쓰면 에러난다.

 

쉘 스크립트에서 백틱은 명령어를 실행하는 데 사용된다. 즉, 이 구문은 총$count문제 중 $answer문제를 맞추셨습니다.를 명령어로 실행하려고 시도한 것이다.

당연히 해당 구문은 실행 가능한 명령이 아니므로 command not found 에러가 발생한다.

수정 방법

백틱(`) 대신 큰따옴표("")를 사용해야 한다.

큰따옴표를 사용하면 문자열로 출력된다.

 

마지막 라인을 큰따옴표로 바꿔주면 잘 실행되는 것을 확인할 수 있다.

728x90