셸 프로 그래 밍 기초: test 명령

10153 단어 linux
1. 프로필
명령 형식:
# 格式1
test condition
# 格式2,注意中括号前后都有空格
[ condition ]

명령 설명: condition 은 test 명령 이 테스트 할 일련의 매개 변수 와 값 입 니 다. 성립 되면 상태 코드 0 를 종료 하고 그렇지 않 으 면 非0 이 므 로 분기 와 순환 에서 test 명령 을 사용 하여 프로 세 스 를 제어 할 수 있 습 니 다).
test 명령 은 세 가지 조건 을 판단 할 수 있 습 니 다.
  • 수치 비교
  • 문자열 비교
  • 파일 비교
  • 2. 수치 비교
    test 명령 을 사용 하 는 가장 흔 한 상황 은 두 수 치 를 비교 하 는 것 이다.다음 표 와 같다.
    비교 하 다.
    묘사 하 다.
    n1 -eq n2
    n1 이 n2 와 같 는 지 확인 합 니 다.
    n1 -ge n2
    n1 이 n2 보다 크 거나 같 는 지 확인 합 니 다.
    n1 -gt n2
    n1 이 n2 보다 큰 지 확인
    n1 -le n2
    n1 이 n2 보다 작 거나 같 는 지 확인 합 니 다.
    n1 -lt n2
    n1 이 n2 보다 작 는 지 확인 합 니 다.
    n1 -ne n2
    n1 이 n2 와 같 지 않 은 지 검사 합 니 다.
    2.1 수치 비교 예시
    #            $?用于返回上个命令退出状态码
    
    #@@@@ -eq测试
    # 1 -eq 2条件不成立,因此退出状态码非0(此处为1)
    [root@vm14 ~]# test 1 -eq 2 ; echo $?
    1
    # 1 -eq 1条件成立,因此退出状态码为0
    [root@vm14 ~]# test 1 -eq 1 ; echo $?
    0
    
    #@@@@ -ne测试
    # 条件1 -ne 1不成立,因此退出状态码为非0(此处为1)
    [root@vm14 ~]# [ 1 -ne 1 ]; echo $?
    1
    # 添加1 -ne 2成立,因此退出状态码为0
    [root@vm14 ~]# [ 1 -ne 2 ]; echo $?
    0
    
    

    2.2 쌍 괄호 사용
    이중 괄호 명령 은 비교 과정 에서 고급 수학 표현 식 을 사용 할 수 있 도록 합 니 다.형식: (( expression ))이중 괄호 명령 기호
    기호.
    묘사 하 다.
    val++
    후 증
    val–
    후 감
    ++val
    먼저 증가 하 다
    –val
    가감
    !
    논리 적 반대
    ~
    위구 반
    **
    멱 연산
    <<
    왼쪽 변위
    >>
    오른쪽 변위
    &
    위 불 화
    |
    비트 불 또는
    &&
    논리 와
    ||
    논리
    # 双括号中的空格时可以省略的
    [root@vm14 ~]# (( 2>1 ));echo $?
    0
    [root@vm14 ~]# (( 2<1 ));echo $?
    1
    
    
    

    3. 문자열 비교
    조건 부 테스트 는 문자열 값 을 비교 할 수 있 습 니 다.다음 표 와 같다.
    비교 하 다.
    묘사 하 다.
    str1 = str2
    str 1 이 str 2 와 같 는 지 확인 합 니 다.
    str1 != str2
    str 1 이 str 2 와 다른 지 확인 합 니 다.
    str1 < str2
    str 1 이 str 2 보다 작 는 지 확인 합 니 다.
    str1 > str2
    str 1 이 str 2 보다 큰 지 확인 합 니 다.
    -n str1
    str1 의 길이 가 0 이 아 닌 지 확인 합 니 다.
    -z str1
    str 1 의 길이 가 0 인지 확인 합 니 다.
    3.1 동일 여부
    #@@@@ =测试
    # 条件"str1" = "str2"条件不成立,因此退出状态码非0(此处为1)
    [root@vm14 ~]# [ "str1" = "str2" ]; echo $?
    1
    # 条件"str1" = "str1"条件成立,因此退出状态码为0
    [root@vm14 ~]# [ "str1" = "str1" ]; echo $?
    0
    

    3.2 크기 판단
    문자열 이 정렬 보다 크 거나 작 을 때 > < 기호 진행 转义
    #@@@@ >< 测试
    # 条件"str1" > "str2"不成立,因此退出状态码为非0(此处为1)
    [root@vm14 ~]# [ "str1" \> "str2" ]; echo $?
    1
    # 条件"str1" < "str2"成立,因此退出状态码为0
    [root@vm14 ~]# [ "str1" \< "str2" ]; echo $?
    0
    # 在比较大小写时,test命令与sort结果相反,test是正常逻辑(ASCII值比较--与java一致)
    # sort命令使用的是系统的本地化语言设置中定义的排序顺序。对于英语,本地化设置指定了在排序顺序中小写字母出现在大写字母前
    # sort命令认为小写a小于大写A
    [root@vm14 ~]# echo -e "A
    a" |sort
    a A # test命令认为小写a大于大写A [root@vm14 ~]# [ "a" \> "A" ] ; echo $? 0

    3.3 비어 있 는 지 여부
    #@@@@ -n -z测试
    # 当你什么也不传的时候,这里命令退出状态码都为0
    [root@vm14 ~]# [ -n  ] ; echo $?
    0
    [root@vm14 ~]# [ -z  ] ; echo $?
    0
    # 因此当你检测变量是否为空时要特别小心,因为你没法判断出来正确的结果
    [root@vm14 ~]# [ -n $not_exist ] ; echo $?
    0
    [root@vm14 ~]# [ -z $not_exist ] ; echo $?
    0
    # 选择1:加上双引号
    [root@vm14 ~]# [ -z "$not_exist" ] ; echo $?
    0
    [root@vm14 ~]# [ -n "$not_exist" ] ; echo $?
    1
    # 选择2:使用双方括号: [[ condition ]]
    [root@vm14 ~]# [[ -z $not_exist ]] ; echo $?
    0
    [root@vm14 ~]# [[ -n $not_exist ]] ; echo $?
    1
    

    3.4 패턴 일치
    쌍방 괄호 명령 은 문자열 비교 에 대한 고급 특성 - 패턴 매 칭 을 제공 합 니 다.쌍방 괄호 명령 의 형식 은 다음 과 같다. [expression]
    # 测试字符串root是否以r开头
    [root@vm14 ~]# [[ "root" = r* ]]; echo $?
    0
    # 测试字符串root是否以a开头
    [root@vm14 ~]# [[ "root" = a* ]]; echo $?
    1
    

    3. 파일 비교
    파일 은 리 눅 스 파일 시스템 의 파일 과 디 렉 터 리 상 태 를 테스트 할 수 있 습 니 다.다음 표 와 같다.
    비교 하 다.
    묘사 하 다.
    -d file
    파일 이 존재 하 는 지 확인 하고 디 렉 터 리 입 니 다.
    -e file
    파일 존재 여부 확인
    -f file
    파일 이 존재 하 는 지 확인 하고 파일 입 니 다.
    -r file
    파일 이 존재 하고 읽 을 수 있 는 지 확인 합 니 다.
    -s file
    파일 이 비어 있 는 지 확인 하기
    -w file
    파일 이 존재 하고 쓸 수 있 는 지 확인 합 니 다.
    -x file
    파일 이 존재 하고 실행 가능 한 지 확인 합 니 다.
    -O file
    파일 이 존재 하 는 지 확인 하고 현재 사용자 소유 입 니 다.
    -G file
    파일 이 존재 하 는 지 확인 하고 기본 그룹 이 현재 사용자 와 같 습 니 다.
    file1 -nt file2
    file 1 이 file 2 보다 새 것 인지 확인 합 니 다.
    file1 -ot file2
    file 1 이 file 2 보다 오래된 지 확인 합 니 다.
    3.1 파일 또는 디 렉 터 리
    # 创建测试用目录和文件
    [root@vm14 ~]# mkdir testdir
    [root@vm14 ~]# touch testdir/testfile
    
    # 判断是否为目录
    [root@vm14 ~]# [ -d testdir ]; echo $?
    0
    [root@vm14 ~]# [ -d testdir/testfile ]; echo $?
    1
    # 判断是否为文件
    [root@vm14 ~]# [ -f testdir ]; echo $?
    1
    [root@vm14 ~]# [ -f testdir/testfile ]; echo $?
    0
    
    # 删除测试目录
    [root@vm14 ~]# rm -rf testdir/
    

    3.2 파일 권한 검사
    # 创建测试文件
    [root@vm14 ~]# touch testfile
    # 查看文件权限,此时具备读写权限,不具备执行权限
    [root@vm14 ~]# ll testfile 
    -rw-r--r--. 1 root root 0 2020-04-12 13:26:09 testfile
    # 读、写、执行权限测试
    [root@vm14 ~]# [ -r testfile ]; echo $?
    0
    [root@vm14 ~]# [ -w testfile ]; echo $?
    0
    [root@vm14 ~]# [ -x testfile ]; echo $?
    1
    
    # 删除文件
    
    

    좋은 웹페이지 즐겨찾기