if [ 조건 ]
then
참일 경우 실행
fi
조건 대신 명령이 들어가면 명령이 정상적으로 실행되었을 때가 참이 된다.
조건
if [ "woo" = 'woo" ]
then
echo "참"
fi
#!/bin/bash
if pwd > /dev/null
then
echo "finished"
fi
#!/bin/bash
echo -n "user name ? : "
read testuser
if grep $testuser /etc/passwd
then
echo "OK"
else
echo "no user $testuser"
fi
[root@sooyeon 0726]# ./test3.sh
user name ? : user1
user1:x:1000:1000:user1:/home/user1:/bin/bash
OK
사용자로부터 httpd가 설치되어있는 지 여부를 확인하고 설치되어 있지 않다면 해당 패키지를 설치하도록 하라. 만약 설치되어 있다면 버전을 출력하고 그렇지 않다면 설치하는 프로그램을 작성하세요.
검색하고 싶은 패키지? : httpd
설치되어 있지 않다.
설치가 진행됨
검색하고 싶은 패키지? : httpd
설치되어 있음
httpd version출력
rpm -qa | grep httpd 하고 $?를 했을 때 1이면 정상X, 파일이 있다면 내용이 나옴
#!/bin/bash
echo -n "설치하고 싶은 패키지? : "
read packagename
if rpm -qa | grep ${packagename}-
then
echo "설치되어 있음"
${packagename} --verion
else
echo "설치되어 있지 않음"
yum -y install ${packagename}
fi
testuser를 /etc/passwd에서 찾아서 있다면 OK 출력, 없다면 NO USER 후 사용자의 디렉토리가 있는 지 확인 하고 있다면 디렉토리가 있다고 출력
#!/bin/bash
testuser=user11
if grep $testuser /etc/passwd
then
echo "OK"
else
echo "NO USER"
if ls -d /home/$testuser
then echo "DIR IS THERE!!"
fi
fi
[root@sooyeon 0726]# useradd user11
[root@sooyeon 0726]# ls /home
user1 user11
[root@sooyeon 0726]# userdel user11
[root@sooyeon 0726]# ls /home
user1 user11
[root@sooyeon 0726]# ./test5.sh
NO USER
/home/user11
DIR IS THERE!!
원격지에 접속한 특정 사용자의 ssh 연결을 종료시켜라
who - 서버에 접속한 사용자를 볼 수 있음
who | grep 192.168.1.14
ps -ef | grep sshd: sshd에서 프로세스 확인
해당 PID를 종료하려면 kill -9 [PID] . PID는 두번째 것
[root@sooyeon 0726]# who
root tty1 2022-07-26 09:26
root pts/0 2022-07-26 09:30 (192.168.1.15)
# 현재 시스템에서 동작하는 프로세스 중 sshd 관련 프로세스 출력
[root@sooyeon 0726]# ps -ef | grep sshd
root 972 1 0 09:09 ? 00:00:00 /usr/sbin/sshd -D
root 1522 972 0 09:30 ? 00:00:02 sshd: root@pts/0
root 12351 1524 0 11:51 pts/0 00:00:00 grep --color=auto sshd
# 위의 결과 중 pts/0과 매치하는 행이 있다면 출력
[root@sooyeon 0726]# ps -ef | grep sshd | grep pts/0
root 1522 972 0 09:30 ? 00:00:02 sshd: root@pts/0
root 12353 1524 0 11:51 pts/0 00:00:00 grep --color=auto sshd
# 앞선 결과는 실제 pts/0과 grep 명령어에서 pts/0을 사용하는 것 두가지가 보인다.
# 이중 실제 우리가 원하는 pts만 골라내기 위해 아래의 결과는 버림
[root@sooyeon 0726]# ps -ef | grep sshd | grep pts/0 | head -1
root 1522 972 0 09:30 ? 00:00:02 sshd: root@pts/0
# 위와 같은 결과에서 gawk를 사용하면 한 행에 있는 각 열을 $1부터 위치 변수에 담을 수 있음
# 우리가 원하는 PID는 $2이므로 $2를 골라 출력
[root@sooyeon 0726]# ps -ef | grep sshd | grep pts/0 | head -1 | gawk '{print $2}'
1522
# 강제종료
kill -9 [PID]
연결을 종료하고 싶은 IP를 입력하세요 : 192.168.1.11
결과(잘못된 IP 입력시)
해당 IP는 연결정보가 없습니다
결과(연결된 IP 있다면)
해당 연결을 종료하였습니다. 출력 후 ssh 연결 종료됨
#!/bin/bash
# 변수 선언
ipaddr=''
echo -n "차단할 IP주소 입력 : "
read ipaddr
if who | grep $ipaddr
then
pts=$(who | grep $ipaddr | gawk '{print $2}')
pid=$(ps -ef | grep sshd | grep $pts | gawk '{print $2}')
echo "${ipaddr}은 차단될 예정입니다"
sleep 2
# 연결 종료된 IP를 영구적으로 차단
route add -host $ipaddr reject
kill -9 $pid
else
echo "해당 IP는 연결정보가 없습니다."
fi
route
없으면
yum -y install net-tools
route del -host $ipaddr reject
if command1
then
commands
elif command2
then
commands
fi
| 문자열비교 | 결과 |
|---|---|
| “문자열1”=”문자열2” | 두 문자열 같으면 참 |
| “문자열1”!=”문자열2” | 두 문자열 같지 않으면 참 |
| -n “문자열” | 문자열이 NULL이 아니면 참 |
| -z “문자열” | 문자열이 NULL이면 참 |
z 자주 사용
| 산술비교 | 결과 |
|---|---|
| 수식1 -eq 수식2(또는 변수) | 두 수식(또는 변수)가 같으면 참 |
| 수식1 -ne 수식2(또는 변수) | 두 수식(또는 변수)가 같지않으면 참 |
| 파일조건 | 결과 |
|---|---|
[ 조건식1 ] $$ [ 조건식2 ] : 두 조건 모두 만족하면 참
[ 조건식1 ] || [ 조건식2 ] : 두 조건 중 하나라도 만족하면 참
# USER가 r로 시작하면 참
if [[ $USER == r* ]]
then
~
else
~
fi
[[ $a == user1 ]] && [[ $b == gildong ]]과 같이 사용도 가능
case "$1" in
start)
echo "시이이작"
echo "시작";;
stop)
echo "중지";;
*)
echo "그외";;
esac