Bash Shell Programming

Bash Shell Programming(9)

Joon0464 2021. 7. 25. 23:31

본 글은 아래 영상을 통해 공부하고 작성했습니다. 제 글보다 영상 시청이 더 도움 될 것입니다.

https://youtu.be/SChc2ye4gcg

산술연산 expr, let

- expr

  • 정수형 산술연산(+,-,*,/,%), 논리연산(|,&), 관계연산(=,!=,>,>=,<,<=)

- let

  • 정수형 산술연산, bit 연산(<<,>>,&,|), 논리연산(&&,||), 단항연산(++,+=,-=)

- Example

expr은 /usr/bin/expr에 존재하는 명령어이다.

let은 bash shell에 빌트인된 커맨드이다. 즉, Bash shell을 사용하지 못한다면 let을 사용하지 못한다.

정수형 산술 연산, 모든 수와 연산기호 사이에는 공백이 있어야 한다.
변수로 활용이 가능하다.
let은 단항 연산자가 가능하다. expr과 다르게 공백은 없이 사용한다.
let 대신 (())로 사용이 가능함

Looping while and until

- while

  • while 다음의 command가 성공하는 동안 do~done 사이의 명령어를 반복 실행
while 조건명령어
do
	반복명령어
done

- until

  • until 다음의 command가 성공할 때 까지 do~done 사이의 명령어를 반복 실행
until 조건명령어
do
	반복명령어
done

- Example

vi while-exam.sh

#!/bin/bash
num=1
while test $num -le 5
do
        echo "Number:$num"
        let num+=1
done

chmod u+x while-exam.sh
vi until-exam.sh

#!/bin/bash
num=1
while test $num -le 5
        echo "Number:$num"
        let num+=
done

chmod u+x until-exam.sh

for-loop

  • 주어진 list 만큼 do ~ done 사이의 명령어를 반복 실행
for item in [LIST]
do
	[COMMANDS]
done

- Example

# vi for-exam1.sh

#!/bin/bash
for NUM in $(seq 10)
do
        echo $NUM
done

# chmod u+x for-exam1.sh

seq를 사용하는 모습

$(seq 10)은 [1,2,3,4,5,6,7,8,9,10] 과 같다.

1~10까지 차례대로 출력된다.

# vi for-exam2.sh

#!/bin/bash
for file in *
do      
        ls $file
done   
# chmod u+x for-exam2.sh

*(에스터리스크)는 현재 디렉터리의 모든 파일 및 디렉터리를 리스트화한다.

현재 디렉터리에 존재하는 모든 파일 및 디렉터리가 출력됨

# vi for-exam3.sh

#!/bin/bash
if [ ! -d ~/backup ]
then
        mkdir ~/backup
fi
for FILE in *
do
        cp $FILE ~/backup/$FILE.old
done

# chmod u+x for-exam3.sh

파일들이 .old의 이름이 추가로 붙어서 백업된 것을 볼 수 있다.

예제

1. 계정 생성 셸 프로그램 : username을 입력 받고 해당 계정이 있을 때는 "계정이 존재한다" 표시하고 계정이 new user인 경우 생성해준다.

# vi useradd.sh

#!/bin/bash
  
echo -n "New username:"
read username
while getent passwd $username &> /dev/null
do
        echo "Sorry, that account $username is aleady taken. please use a different username."
        echo -n "New username:"
        read username
done    
sudo useradd -m -s /bin/bash $username

# chmod u+x useradd.sh

getent passwd [username]은 username이 /etc/passwd에 존재하는지 출력해준다.

2. while loop와 if문을 함께 사용한 예제

# vi joon.sh

#1/bin/bash
number=0
  
while :
do
  if [ $number -gt 2 ]; then
    break
  fi

  echo "Number: $number"
  ((number++))
done

break를 사용하면 while loop를 빠져나올 수 있다.

연습문제

1. until 명령어를 사용하여 계정을 삭제하는 스크립트를 작성하시오.

# vi remove-user.sh

#!/bin/bash
echo -n "username to remove:"
read username
until getent passwd $username &> /dev/null
do
        echo "$username does not exist."
        echo -n "username to remove:"
        read username
done    
sudo userdel -r $username

# chmod u+x remove-user.sh

 

2. 작업 디렉토리를 입력 받아 해당 디렉토리에 파일의 수오 ㅏ디렉토리 수를 출력하는 프로그램을 작성하시오.

 

'Bash Shell Programming' 카테고리의 다른 글

Bash Shell Programming(8)  (0) 2021.07.25
Bash Shell Programming(7)  (0) 2021.07.23
Bash Shell Programming(6)  (0) 2021.07.23
Bash Shell Programming(5)  (0) 2021.07.22
Bash Shell Programming(4)  (0) 2021.07.21