24_Shell 언어 -- if 조건 판단 의 문자 테스트
정수 테스트: 두 정수 가 누가 크 고 누가 작 으 며 똑 같은 지 비교 합 니 다.
문자 테스트: 두 문자열 이 같은 지 비교 하기;
파일 테스트: 어떤 파일 이 읽 기 권한, 쓰기 권한, 실행 권한 이 있 는 지 테스트 합 니 다.
정수 테스트 는 앞에서 소개 한 적 이 있 는데, 여 기 는 문자 테스트 에 중심 을 두 고 있다.문자 테스트 에서 사용 하 는 비교 기 호 는 자주 사용 하 는 수학 기호 이다.
>: (ASCII 메타 에서 의 우선 순위, 왼쪽 에서 오른쪽으로 한 글자 씩 비교)
<: 이하
= =: (주의, = 할당 표시)
= ~: 왼쪽 문자열 이 오른쪽 패턴 과 일치 하 는 지 판단 합 니 다. 보통 이중 괄호 에 사 용 됩 니 다.
[[ $opt1=~$opt2 ]]
보통 줄 의 첫 줄 끝 에 닻 을 내리 고 따 옴 표를 붙 이지 않 는 다.
상기 비 교 는 모두 두 변수의 비교 이지 만 bash 에서 도 단일 항목 테스트 를 할 수 있 습 니 다. 즉, 하나의 변수 만 테스트 할 수 있 습 니 다.
- z $STRING: 비어 있 으 면 진짜 이 고, 비어 있 지 않 으 면 가짜 입 니 다.
- n $STRING: 비어 있 으 면 가짜, 비어 있 지 않 으 면 진짜
다음은 문자 테스트 의 용법 을 예 로 들 어 설명 한다.
예 1: 사용자 의 셸 이 bash 인지 아 닌 지 를 판단 하 는 스 크 립 트 를 작성 합 니 다.
사용자 의 셸 을 저장 할 변 수 를 정의 한 다음 판단 할 수 있 습 니 다. ["$Shell"= "/bin/bash"] 명령 행 에서 초기 실험 을 할 수 있 습 니 다.
[root@localhosttutor]# Shell="/bin/tcsh"
\# 변수 Shell 을 정의 합 니 다. "/bin/tcsh"로 할당 합 니 다.
[root@localhosttutor]# [ $Shell == "/bin/bash"]
\# Shell 이 "/bin/bash"인지 판단 합 니 다.
[root@localhosttutor]# echo $?
1
\# 테스트 결과 보기
[root@localhosttutor]# Shell="/bin/bash"
[root@localhosttutor]# [ $Shell == "/bin/bash"]
\# 주의, $Shell 에 도 따옴표 가 붙 는 것 이 좋 습 니 다. 문자열 에 빈 칸 이 있 으 면 여러 변수 로 여 겨 질 수 있 기 때 문 입 니 다.
[root@localhosttutor]# echo $?
0
구체 적 인 스 크 립 트 는 다음 과 같 습 니 다.
[root@localhosttutor]# vim if_shell.sh
#!/bin/bash
#
Shell=`grep "^$1:"/etc/passwd | cut -d: -f7`
if [ "$Shell" =="/bin/bash" ]; then
echo "Bash User."
Ret=0
else
echo "Not Bash User."
Ret=9
fi
exit $Ret
[root@localhosttutor]# bash -n if_shell.sh
[root@localhosttutor]# bash if_shell.sh root
Bash User.
[root@localhosttutor]# bash -x if_shell.sh daemon
++ cut -d: -f7
++ grep '^daemon:' /etc/passwd
+ Shell=/sbin/nologin
+ '[' /sbin/nologin == /bin/bash']'
+ echo 'Not Bash User.'
Not Bash User.
+ Ret=9
+ exit 9
[root@localhosttutor]# bash if_shell.sh roott
Not Bash User.
여기 roott 사용 자 는 존재 하지 않 습 니 다. 스 크 립 트 에서 사용자 의 존재 여 부 를 먼저 판단 하면 스 크 립 트 가 더욱 완벽 해 집 니 다.- z 로 문자 판단 가능:
[root@localhosttutor]# echo $Shell
/bin/bash
[root@localhosttutor]# [ -z $Shell ]
\# - z 는 변수 Shell 에 값 이 있 는 지, 있 는 지 없 는 지 를 판단 합 니 다.
[root@localhosttutor]# echo $?
1
[root@localhosttutor]# unset Shell
\# 취소 변수 셸
[root@localhosttutor]# [ -z $Shell ]
[root@localhosttutor]# echo $?
0
따라서 이 스 크 립 트 는 다음 과 같이 개선 할 수 있 습 니 다.
[root@localhosttutor]# vim if_shell.sh
#!/bin/bash
#
Shell=`grep "^$1:"/etc/passwd | cut -d: -f7`
if [ -z $Shell ]; then
# Shell , , , ; , ,
echo "No such user or User's shell is null."
exit 10
#
fi
if [ "$Shell" =="/bin/bash" ]; then
echo "Bash User."
Ret=0
else
echo "Not Bash User."
Ret=9
fi
exit $Ret
[root@localhosttutor]# bash -x if_shell.sh roott
++ cut -d: -f7
++ grep '^roott:' /etc/passwd
+ Shell=
+ '[' -z ']'
+ echo 'No such user or User'\''sshell is null.'
No such user or User's shell isnull.
+ exit 10
위의 예 를 사용 하 시 겠 습 니까? 그러나 사용자 의 셸 이 sh 로 끝 나 는 지 여 부 를 판단 하기 만 하면 패턴 이 일치 하 는 방식 으로 문자열 을 일치 시 킵 니 다.
[root@localhosttutor]# Shell=/bin/bash
[root@localhosttutor]# [[ “$Shell” =~ sh$ ]]
\# 줄 끝 에 닻 을 올 리 는 방식 으로 패턴 매 칭 을 하고 변수 Shell 이 sh 로 끝 나 는 지 판단 합 니 다.
[root@localhosttutor]# echo $?
0
상기 예제 개선 은 한 사용자 의 셸 이 sh 로 끝 나 는 지 여 부 를 판단 하 는 것 입 니 다. 로그 인 가능 한 사용자 로 표시 되 는 지, 로그 인 하지 않 은 사용자 로 표시 되 는 지 여 부 를 판단 하 는 것 입 니 다.
[root@localhosttutor]# vim if_shell_sh.sh
#!/bin/bash
#
Shell=`grep "^$1:"/etc/passwd | cut -d: -f7`
if [ -z $Shell ]; then
echo "No Shell."
exit 3
fi
if [[ "$Shell" =~ sh$]]; then
echo "Login User"
Ret=0
else
echo "None Login User."
Re4=4
fi
exit $Ret
[root@localhosttutor]# bash -n if_shell_sh.sh
[root@localhosttutor]# bash if_shell_sh.sh root
Login User
[root@localhosttutor]# bash if_shell_sh.sh roott
No Shell.
[root@localhosttutor]# bash -x if_shell_sh.sh daemon
++ cut -d: -f7
++ grep '^daemon:' /etc/passwd
+ Shell=/sbin/nologin
+ '[' -z /sbin/nologin ']'
+ [[ /sbin/nologin =~ sh$ ]]
+ echo 'None Login User.'
None Login User.
+ Re4=4
+ exit
[root@localhosttutor]# useradd -s/bin/tcsh hello
\# 사용 자 를 만 들 고 셸 을 tcsh 로 지정 합 니 다.
[root@localhosttutor]# bash -x if_shell_sh.sh hello
++ cut -d: -f7
++ grep '^hello:' /etc/passwd
+ Shell=/bin/tcsh
+ '[' -z /bin/tcsh ']'
+ [[ /bin/tcsh =~ sh$ ]]
+ echo 'Login User'
Login User
+ Ret=0
+ exit 0
예 2. 스 크 립 트 작성: 현재 호스트 의 CPU 생산 업 체 를 판단 합 니 다. 그 정 보 는/proc/cpu info 파일 에서 vendorid 줄 중.생산 업 체 가 GenuineIntel 이면 Intel 회사 로 표 시 됩 니 다.그렇지 않 으 면 AMD 회사 로 표 시 됩 니 다.
grep 명령 으로 호스트 의 생산 업 체 를 꺼 낼 수 있 습 니 다:
[root@localhosttutor]# cat/proc/cpuinfo | grep "vendor_id"| uniq
vendor_id : GenuineIntel
[root@localhosttutor]# cat/proc/cpuinfo | grep "vendor_id"| uniq | cut -d: -f2
GenuineIntel
# ,
이 스 크 립 트 는 다음 과 같이 쓸 수 있 습 니 다:
[root@localhosttutor]# vim if_cup.sh
#!/bin/bash
#
Vendor=`grep"vendor_id" /proc/cpuinfo | uniq | cut -d: -f2`
if [[ "$Vendor" =~[[:space:]]*GenuineIntel$ ]]; then
echo "Intel"
else
echo "AMD"
fi
[root@localhosttutor]# bash -n if_cup.sh
[root@localhosttutor]# bash -x if_cup.sh
++ cut -d: -f2
++ uniq
++ grep vendor_id /proc/cpuinfo
+ Vendor=' GenuineIntel'
+ [[ GenuineIntel =~ [[:space:]]*GenuineIntel$ ]]
+ echo Intel
Intel
예 3. 스 크 립 트 를 작성 하고 매개 변 수 를 통 해 스 크 립 트 에 문자열 을 전달 합 니 다. 전 달 된 문자열 이 "memory"또는 "Memory"이면 현재 호스트 의 메모리 정 보 를 MB 단위 로 표시 합 니 다.그렇지 않 으 면/proc/uptime 파일 의 내용 을 표시 합 니 다.
[root@localhosttutor]# vim memory.sh
#!/bin/bash
#
if [[ $1 =~ ^[Mm]emory$ ]]; then
free -m
else
cat /proc/uptime
fi
[root@localhosttutor]# bash -n memory.sh
[root@localhosttutor]# bash -x memory.sh memory
+ [[ memory =~ ^[Mm]emory$ ]]
+ free -m
total used free shared buffers cached
Mem: 996 509 487 0 54 160
-/+ buffers/cache: 293 702
Swap: 2015 0 2015
[root@localhosttutor]# bash -x memory.sh Memory
+ [[ Memory =~ ^[Mm]emory$ ]]
+ free -m
total used free shared buffers cached
Mem: 996 509 487 0 54 160
-/+ buffers/cache: 293 702
Swap: 2015 0 2015
[root@localhosttutor]# bash -x memory.sh abc
+ [[ abc =~ ^[Mm]emory$ ]]
+ cat /proc/uptime
47430.02 46732.82
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.