bash 셸 학습 변수

12356 단어 shell변량배열
변수 에 대한 내용
1. 변수 이름: 2. 변수 할당:
3. 변수 유형: 4. 변수 취소: 5. 변수 값 가 져 오기:
6. 변수의 속성 조정
7. 배열 8, 변수 확장: 9. 명령 확장:
1. 변수 이름:    1. 알파벳, 숫자, 밑줄 만 포함 하고 숫자 로 시작 할 수 없습니다.    2. 시스템 에 있 는 환경 변수 와 이름 을 바 꾸 지 말 아야 합 니 다.    3. 명 의 를 알 수 있 는 것 이 좋다
2. 변수 할당:
설정 변수: 변수 이름 = 값
var_name=value 등호 양쪽 에 빈 칸 이 있어 서 는 안 된다.
[root@lovelace 51cto]# youname=lovelace
[root@lovelace 51cto]# echo $youname
lovelace

숫자 에 대해 서 는 이렇게 변수 에 값 을 부여 하고 변수의 유형 을 정의 할 수 있 습 니 다.
[root@lovelace 51cto]# declare -i sum=100
[root@lovelace 51cto]# echo $sum
100

 
3. bash: 변수 유형:    환경 변수:    로 컬 변수 (부분 변수):    위치 변수:    특수 변수 (시스템 변수): 로 컬 변수: 역할 영역 은 전체 bash 프로 세 스 입 니 다.    varname = value 부분 변수: 역할 영역 은 현재 코드 세그먼트 에 만 유효 합 니 다.    local varname=value
환경 변수: 현재 셸 프로 세 스 와 하위 프로 세 스 역할 영역    export varname=value "임의의 스 크 립 트 를 내 보 낼 때 키 셸 프로 세 스 를 시작 합 니 다."        명령 행 에서 시 작 된 스 크 립 트 는 현재 셸 의 환경 변 수 를 계승 합 니 다.        시스템 이 자동 으로 실행 하 는 스 크 립 트 (명령 행 과 무관) 는 필요 한 환경 변수 위치 변 수 를 스스로 정의 해 야 합 니 다.    $1, $2,... 특수 변수: 일부 특수 데 이 터 를 유지 합 니 다.        $? 이전 명령 실행 상태 반환 값        $# 매개 변수의 개수        $* 매개 변수 목록        $@ 매개 변수 목록        $0  명령 자체  스 크 립 트 자체    스 크 립 트 를 실행 할 때의 스 크 립 트 경로 와 이름 프로그램 은 일반적으로 두 가지 반환 값 이 있 습 니 다.      프로그램 실행 결과;    실행 상태 반환 코드 (0 - 255)            옳다            1 - 255: 오류 실행 1,2,127 시스템 예약 특별한 의미 가 있 습 니 다. 4. 취소 변수:    unset varname
[root@lovelace 51cto]# unset youname;echo $youname

현재 셸 의 변 수 를 보기        set  매개 변수 와 옵션 이 없습니다.
[root@lovelace 51cto]# set
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")
BASH_VERSION='3.2.25(1)-release'
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=80
CVS_RSH=ssh
DIRSTACK=()
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTFILE=/root/.bash_history
HISTFILESIZE=5000
HISTSIZE=5000
HOME=/root
HOSTNAME=lovelace.localdomain
HOSTTYPE=i386
IFS=$' \t
' INPUTRC=/etc/inputrc LANG=zh_CN.GB2312 LC_ALL=zh_CN.GB2312 LESSOPEN='|/usr/bin/lesspipe.sh %s' LINES=20 LOGNAME=root LS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:' MACHTYPE=i386-redhat-linux-gnu MAIL=/var/spool/mail/root MAILCHECK=60 OLDPWD=/home/scripts OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin PIPESTATUS=([0]="0") PPID=16933 PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' PS1='[\u@\h \W]\$ ' PS2='> ' PS4='+ ' PWD=/home/scripts/51cto SHELL=/bin/bash SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor SHLVL=1 SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass SSH_CLIENT='192.168.2.28 8577 22' SSH_CONNECTION='192.168.2.28 8577 192.168.2.54 22' SSH_TTY=/dev/pts/0 SUPPORTED=zh_CN.UTF-8:zh_CN.GBK:zh_CN.GB2312:zh_CN:zh:en_US.UTF-8:en_US:en TERM=xterm UID=0 USER=root _=echo consoletype=pty sum=100 tmpid=0 x=101

현재 셸 의 환경 변 수 를 보면        env        export        printenv 문자열 변수 에 새로운 변 수 를 추가 합 니 다. PATH 새로운 경로 export 추가 PATH=$PATH:/usr/local/apsch/bin
 
5. 변수 값 가 져 오기:    $변수 이름    ${변수 이름}  $(x) 이것 은 명령 으로 호출 할 수 있다.     변수 가 구문 에서 인용 되면 ${x} 을 사용 해 야 합 니 다. 배열 의 변 수 를 가 져 올 때 도 ${} 을 사용 하여 호출 해 야 합 니 다.
[root@lovelace 51cto]# listnum=100
[root@lovelace 51cto]# echo $listnum
100
[root@lovelace 51cto]# echo ${listnum}
100

변수 와 따옴표 의 관계:    작은 따옴표: 보 이 는 대로 얻 는 것    따옴표: 특수 기 호 를 유효 하 게 합 니 다.
[root@lovelace 51cto]# echo "There are $listnum pelple."
There are 100 pelple.
[root@lovelace 51cto]# echo 'There are $listnum pelple.'
There are $listnum pelple.

6. 변수의 속성 조정:
1、readonly 명령 하 다. :정의 읽 기 전용 변수        -p: 현재 읽 기 전용 속성 을 가 진 변수 목록 보이 기        -f: 설정 함수 수정 불가        -a: 정의 배열 수정 불가 2, declare 명령 하 다.         -r: 읽 기 전용 변수 설정        -p: 변수의 속성 표시        -a: 변 수 는 배열 입 니 다.        -f: 명령 을 찾 을 때 함수 만 찾 습 니 다.        -i: 변 수 는 정수 입 니 다.        -F: 모든 함수 식 이름과 속성 표시        -t. 설정 변 수 는 trace 속성 을 가지 고 있 습 니 다.        -x: 환경 변수 7 설정, 배열:   
 데이터 구조 로 관련 데이터 항목 으로 구성 되 어 있 으 며, 각 데이터 항목 을 배열 의 요소 라 고 부 르 며, 색인 방식 으로 요소 의 값 배열 대 가 를 얻 을 수 있 습 니 다.
1. 단일 할당, index 를 색인 번호 로 하고 색인 번 호 는 0 부터 시작 합 니 다.    a[0]=1    a[2]=2    a[3]=3
#为数组赋值
[root@lovelace 51cto]# a[0]=1
[root@lovelace 51cto]# a[1]=2
[root@lovelace 51cto]# a[2]=3
#显示数组中所有值方法一
[root@lovelace 51cto]# echo ${a[*]}
1 2 3
#显示数组中所有值方法二
[root@lovelace 51cto]# echo ${a[@]}
1 2 3
#为数组添加数据项
[root@lovelace 51cto]# a[3]='nick'
[root@lovelace 51cto]# echo ${a[*]}
1 2 3 nick

2. 작은 괄호 를 배열 로 할당 합 니 다.
    a=(1 2 3) 기본 스페이스 바 분리
#为数组b赋值  记住是小括号,不是大括号
[root@lovelace 51cto]# b=(bbs www http ftp)
[root@lovelace 51cto]# echo ${b[*]}
bbs www http ftp
#打印出第一个和第三个数据项
[root@lovelace 51cto]# echo ${b[0]};echo '*******';echo ${b[2]}
bbs
*******
http

3. 배열 의 특정한 데이터 항목 에 값 을 부여 합 니 다. 기본 값 은 0 부터 입 니 다. 중간 에 표시 되 지 않 은 색인 항목 이 나타 나 면 이전 색인 항목 부터 계산 합 니 다.
    a={51 [3]=5  cto  [6]=8}
#为数组赋值
[root@lovelace 51cto]# c=(51cto [3]='nick' 51 [5]='lovelace')
#打印出数组中所有值
[root@lovelace 51cto]# echo ${c[@]}
51cto nick 51 lovelace
#验证中间出现的数值是从哪个索引项开始算起的
[root@lovelace 51cto]# echo ${c[1]}
[root@lovelace 51cto]# echo ${c[0]}
51cto
[root@lovelace 51cto]# echo ${c[2]}
[root@lovelace 51cto]# echo ${c[4]}
51

 
할당 보이 기:    echo ${a [1]} 배열 의 모든 값 꺼 내기:    echo ${a[@]}  echo ${a [*]} 배열 요소 의 개 수 를 가 져 옵 니 다:    echo ${#a[@]} 혹은 echo ${#a[*]}
#打印出数组所有值,统计数组中数据项个数
[root@lovelace 51cto]# echo ${c[@]};echo ${#c[@]};echo ${#c[*]}
51cto nick 51 lovelace
4
4

8. 고급 변수: ${변수 이름}  변수 확장 $(명령)      명령 바 꾸 기 $(산술 식)  산술 확장
 
$(명령) 명령 바 꾸 기: 변수 존재 여부 테스트:    ${myname:-'nick'} 판단 조건, my name 이 존재 하면 값 을 되 돌려 줍 니 다. my name 이 존재 하지 않 으 면 - 나중에 연 결 된 문자열 을 전체 변수 로 확장 한 결과 로 보고 테스트 변수 가 존재 하지 않 거나 비어 있 지 않 거나 기본 값 으로 되 돌려 줍 니 다.    ${myname:-'nick'} 테스트 대기 변수 가 존재 하지 않 거나 비어 있 으 면 전송 - 후의 값 이 존재 하면 전송 변수의 값 테스트 변 수 는 존재 하지 않 거나 비어 있 으 며 변수 에 기본 값 을 설정 합 니 다.    ${count:=100} 변수 coutn 이 값 이 없 거나 비어 있 으 면 테스트 대기 변 수 를 기본 값 으로 설정 합 니 다.
테스트 변수 가 존재 하지 않 거나 비어 있 거나 오류 정 보 를 전송 합 니 다.    ${myname:?"your input error "} 테스트 변수의 존재 성:    ${myname:+Ture} 변수 가 존재 하고 값 이 비어 있 지 않 으 면 판단 에 부합 합 니 다.
    :  비다              띄 우기    -   역방향            존재 하지 않 음 을 추측 하 다    +   정방 향            존 재 를 측정 하 다    ?  문제 가 있다            완 비 됐 는 지 확인 하고 실행 하도록 하 겠 습 니 다.    =   값 을 정 하 다            제어 값 변수 에 기본 값 $(명령) 을 설정 합 니 다. 명령 바 꾸 기  이 명령 은.. (esc 의 버튼 은 작은 따옴표 가 아 닙 니 다) 스 크 립 트 를 작성 할 때 유용 합 니 다.
#打印出当前路径
[root@lovelace 51cto]# echo $(pwd)
/home/scripts/51cto
[root@lovelace 51cto]# echo `pwd`
/home/scripts/51cto

$(산술 식) 산술 확장: 이것 은 다음 장 에서 단독으로 설명 할 것 입 니 다. 여기 서 예 시 를 보 여 줍 니 다.
[root@lovelace 51cto]# a=3;b=5
[root@lovelace 51cto]# echo $((a+b))
8

9. 변수 확장 "문자열 슬라이스 제거, 문자열 길이 문자열 절편 은 0 에서 시 작 됩 니 다. ${} 을 사용 할 때 괄호 안의 변 수 는 앞의 $를 참조 하여 쓰 지 않 아 도 됩 니 다.        ${변수: 위치 기점}   ${myname:3}        ${변수: 위치 기점: 길이}
#定义变量
[root@lovelace 51cto]# myname=lovelace
#取得变量字符串从第三个字符开始到字符串结尾的所有字符
[root@lovelace 51cto]# echo ${myname:3}
elace
#取得变量字符串中从第四个字符开始,长度为2的字符
[root@lovelace 51cto]# echo ${myname:4:2}
la

    
부분 매개 변수 추출:        명령 행 인 자 는 $1 부터 순서대로 유추 합 니 다. $@ 은 모든 인 자 를 대표 합 니 다. 명령 자 체 는 $0 으로 표시 합 니 다.        ${@: 시작 점}: 점 에서 시작 하여 뒤의 모든 위치 매개 변 수 를 가 져 옵 니 다.        ${@: 시작 점: 개수}: 시작 점 에서 시작 하여 지정 한 개수 의 위치 매개 변수 예제 스 크 립 트 를 가 져 옵 니 다.
#!/bin/bash
#Verson:0.1
#Auther:lovelace
#Pragram:test argument
#取得程序名
echo $0
#取得变量的所有值
echo ${@:1}
#取得变量的个数
echo $#

 
실행 결과:
[root@lovelace 51cto]# ./argument.sh 12 32 45
./argument.sh
12 32 45
3

 
문자열 길이 계산:    ${\# 변수 이름}: 변수 값 을 되 돌려 주 는 문자열 길이    expr: 문자열 의 길 이 를 통계 할 수 있 습 니 다.        1、str="here you are."           len$(expr length "$str")           echo "str 문자열 길이: $len "        2、expr "문자열": ". *"            str="here you are."            len=$(expr "$str":'.*')            echo "str 문자열 길 이 는: $len"입 니 다.
[root@lovelace 51cto]# echo $myname
lovelace
#使用${#变量名}取得字符串长度  比较常用
[root@lovelace 51cto]# echo ${#myname}
8
#使用${expr length “$变量名”}取得字符串长度
[root@lovelace 51cto]# len=$(expr length "$myname")
[root@lovelace 51cto]# echo $len
8
#使用${expr “$变量名” : '.*'}取得字符串长度
[root@lovelace 51cto]# len=$(expr "$myname" : '.*')
[root@lovelace 51cto]# echo $len
8

 
변수 확장: 대비 스타일    문자열 앞 에 대비 하여 가장 짧 은 것 을 삭제 합 니 다.         ${변수\# 스타일}    문자열 앞 에 대비 하여 가장 긴 것 을 삭제 합 니 다.         ${변수\# # 스타일}
#定义一个变量
[root@lovelace 51cto]# path=$(pwd)
#查看变量值
[root@lovelace 51cto]# echo $path
/home/scripts/51cto
#使用对比样式
[root@lovelace 51cto]# echo ${path#*/}
home/scripts/51cto
#此对比样式可以取得目录名
[root@lovelace 51cto]# echo ${path##/*/}
51cto

    문자열 뒤에 비교 하여 가장 짧 은 것 을 삭제 합 니 다.         ${변수% 스타일}    문자열 뒤에 비교 하여 가장 긴 것 을 삭제 합 니 다.          ${변수%% 스타일}
#使用此对比样式可以取得路径名
[root@lovelace 51cto]# echo ${path%/*}
/home/scripts
#使用此对比样式没有任何数据输出
[root@lovelace 51cto]# echo ${path%%/*}

 
대비 양식 은 자신의 사고 에 따라 얻 을 수 있 는데 이것 은 고정된 격식 이 없다.
 
부분 문자열 대체 또는 삭제:    첫 번 째 대비 문자열 만 바 꿉 니 다.        ${변수/스타일/문자열 교체}    일치 하 는 모든 문자열 바 꾸 기        ${변수//스타일/문자열 교체}
#定义一个变量
[root@lovelace 51cto]# echo $myname
lovelace
#替换第一次出现的l为F
[root@lovelace 51cto]# echo ${myname/l/F}
Fovelace
#替换字符串中所有l为F
[root@lovelace 51cto]# echo ${myname//l/F}
FoveFace

 
일치 하 는 문자열 삭제    하나만 삭제 하 다        ${변수/스타일/}    모두 삭제        ${변수//스타일/}    #T  행수 위치    %LE  맨 뒤   
#定义一个变量获取IP地址相关的信息
[root@lovelace 51cto]# tmp=$(ifconfig eth0 | grep 'inet addr')
#删除对比样式成功的字符串 然后赋值给变量r
[root@lovelace 51cto]# r=${tmp/inet addr:/}
#删除对比样式成功的字符串 然后赋值给变量ip
[root@lovelace 51cto]# ip=${r/ Bcast*/}
#打印出变量ip 查看是不是我们想要的结果
[root@lovelace 51cto]# echo $ip
192.168.2.54

변수 확장: 변수 이름 목록, 배열 색인 목록 에서 변수 이름 목록 을 가 져 옵 니 다.        ${! 시작 문자열 @} 또는 ${! 시작 문자열 *}
[root@lovelace 51cto]# myname=lovelace;mytest=51cto
[root@lovelace 51cto]# echo ${!my@}
myname mytest
[root@lovelace 51cto]# echo ${!my*}
myname mytest

배열 인덱스 목록 가 져 오기:        ${! 배열 변수 [@]} 또는 ${! 배열 변수 [*]}
#取得数组a的所有值
[root@lovelace 51cto]# echo ${a[@]}
hello 2 3 nick
#取得数组a的索引项
[root@lovelace 51cto]# echo ${!a[@]}
0 1 2 3

 
후기: 셸 프로 그래 밍 을 배 우 는 것 은 변수 라 는 부분 이 매우 중요 합 니 다. 글 에 열거 한 것 은 변수 내용 의 일부분 일 뿐 이 고 시스템 내 장 된 변수 와 환경 변수, 부분 변수 간 의 전환 도 많 습 니 다. 우 리 는 언급 하지 않 았 기 때문에 우 리 는 많은 연습 과 정 리 를 해 야 합 니 다. 이렇게 많은 지식 을 기억 하지 못 하 더 라 도 능숙 하고 능숙 하 게 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기