본 글은 아래 영상을 통해 공부하고 작성했습니다. 제 글보다 영상 시청이 더 도움 될 것입니다.
산술연산 expr, let
- expr
- 정수형 산술연산(+,-,*,/,%), 논리연산(|,&), 관계연산(=,!=,>,>=,<,<=)
- let
- 정수형 산술연산, bit 연산(<<,>>,&,|), 논리연산(&&,||), 단항연산(++,+=,-=)
- Example
expr은 /usr/bin/expr에 존재하는 명령어이다.
let은 bash shell에 빌트인된 커맨드이다. 즉, Bash shell을 사용하지 못한다면 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 10)은 [1,2,3,4,5,6,7,8,9,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
예제
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 |