기술나눔

[Linux][셸][셸 변수] 자세히 설명

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


1. 지역변수

  • Shell 변수를 정의합니다. 변수 이름을 추가할 필요가 없습니다.$
  • 지역 변수사용자의 현재 쉘 수명 동안에만 유효합니다.

2. 변수 정의

  • 변수 이름 요구 사항: 문자, 숫자, 밑줄로 구성됩니다. 문자나 밑줄로 시작할 수 있습니다.
  • 변수 이름은 대소문자를 엄격하게 구분합니다.

3. 변수 값 가져오기

  • 아포스트로피: 보이는 대로 얻는다, 강한 인용
  • 큰따옴표: 모든 내용을 따옴표로 묶어 출력, 특수기호 식별, 약한 참조 식별
  • 따옴표 없음: 연속된 기호는 따옴표 없이도 가능합니다. 공백이 있으면 큰따옴표를 사용하는 것이 가장 좋습니다.
  • 백틱: 명령 실행 결과를 참조합니다.$()용법

4.특수변수

  • 매개변수를 전달하기 위해 스크립트와 함수에 사용되는 쉘의 특수 변수입니다.

  • 다음과 같은 특수 위치 매개변수 변수가 있습니다.

    변하기 쉬운효과
    $0쉘 스크립트 파일 이름 및 스크립트 경로 가져오기
    $n쉘 스크립트의 n번째 매개변수를 가져옵니다. n은 1에서 9 사이입니다. 9보다 크면 일부{},좋다{$10}
    $#실행된 쉘 스크립트 뒤에 있는 총 매개변수 수를 가져옵니다.
    $*따옴표 없이 쉘 스크립트의 모든 매개변수를 얻으십시오. 이는 다음과 같습니다.$@이 함수와 따옴표 "$*"는 다음과 같습니다.모든 매개변수를 단일 문자열로 수신합니다.
    $@따옴표가 없으면 위와 같은 효과가 나타납니다.모든 매개변수를 독립된 문자열로 수신

5. 특수 상태 변수

  • 검색방법man bash,찾다Special Parameters

    변하기 쉬운효과
    $?마지막 명령 실행 상태의 반환 값, 0은 정확, 0이 아닌 경우 실패
    $$현재 쉘 스크립트의 프로세스 번호
    $!마지막 백그라운드 프로세스의 PID
    $_마지막 명령의 마지막 매개변수 가져오기

6. 쉘 내장 변수 명령

1.에코

  • 매개변수
    • -n: 줄바꿈 없이 내용 출력
    • -e: 이스케이프 문자 해석
      • n: 개행
      • r: 입력하다
      • t:탭
      • b:역행 키이
      • v: 세로 탭 문자

2. 평가

  • 기능:여러 명령 실행
  • eval ls; cd ~

3. 임원

  • 기능: 자식 프로세스를 생성하고 후속 명령을 실행하지 마십시오.exec실행 후 자동으로exit

7. 가로채기 문자열

  • 문법

    문법효과
    #처음부터 가장 짧은 일치 항목을 제거합니다.
    ##처음부터 가장 긴 일치 항목을 제거합니다.
    %끝에서 가장 짧은 일치 항목을 제거합니다.
    %%끝에서 가장 긴 일치 항목을 제거합니다.
    #지정된 문자 콘텐츠 차단
    a*ca로 시작하고 중간에 임의 개수의 문자가 있고 c로 끝나는 문자열과 일치합니다.
    ${变量}변수 값을 반환합니다.
    ${#变量}가변 길이, 문자 길이 반환
    ${变量:start}변수 오프셋 값 뒤의 문자를 반환합니다.
    ${变量:start:length}오프셋 후 길이가 제한된 문자 추출
    ${变量#word}변수의 시작 부분에서 가장 짧은 일치 단어 하위 문자열을 삭제합니다.
    ${变量##word}변수의 시작 부분에서 가장 긴 일치 단어를 삭제합니다.
    ${变量%word}변수 끝에서 가장 짧은 일치 단어 하위 문자열을 제거합니다.
    ${变量%%word}변수 끝에서 가장 긴 일치 단어 하위 문자열을 제거합니다.
    ${变量/pattern/string}첫 번째로 일치하는 패턴을 문자열로 교체
    ${变量//pattern/string}모든 패턴을 문자열로 교체
  • 운용예: 파일 이름 삭제

    # 通过⼦串的替换⽅式
    snowk@SnowKYP# f=stu_102999_1_finished.jpg
    
    # 变量的⼦串功能,去掉后缀
    snowk@SnowKYP# echo ${f//_finished/}
    stu_102999_1.jpg
    
    # 利⽤变量的反引⽤替换⽂件名
    snowk@SnowKYP# mv $f `echo ${f//_finished/}`
    
    # 剩下的⽂件,利⽤循环操作
    # 找出剩下所有需要替换的jpg⽂件
    snowk@SnowKYP# ls *fin*.jpg
    stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg
    stu_102999_5_finished.jpg
    
    # 写shell循环代码,循环操作
    # 去掉所有jpg⽂件的_finished后缀
    snowk@SnowKYP# for file in `ls *fin*.jpg`;do mv $file `echo ${file//_finished/}`;done
    
    snowk@SnowKYP# ls *.jpg
    stu_102999_1.jpg stu_102999_2.jpg stu_102999_3.jpg stu_102999_4.jpg stu_102999_5.jpg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

8. 특수 쉘 확장 변수 처리

1. 문법

  • 기능: 이 4가지 확장변수는 모두 변수값의 판단과 처리에 속합니다.
  • 문법parameter,参数,范围
    • ${parameter:-word}:만약에parameter변수 값이 비어 있습니다. 반환word
    • ${parameter:=word}:만약에parameter변수 값이 비어 있는 경우word변수 값을 대체하고 해당 값을 반환합니다.
    • ${parameter:?word}:만약에parameter변수 값이 비어 있습니다.word~처럼stderr출력, 그렇지 않으면 변수 값 출력
      • 변수를 공백으로 설정하여 오류가 발생한 경우 오류 메시지를 반환하는 데 사용됩니다.
    • ${parameter:+word}:만약에parameter변수 값이 비어 있으면 아무것도 하지 말고, 그렇지 않으면word반품

2. 응용 시나리오

  • 데이터 백업, 만료된 데이터 삭제 스크립트
    # 原脚本命令,有bug,有歧义
    find ${file_path} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    # 修正后的脚本命令
    # 如果有bug起义,就在当前目录搜索并执行删除
    find ${file_path:=/tmp} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6