bash 셸 학습 변수
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
후기: 셸 프로 그래 밍 을 배 우 는 것 은 변수 라 는 부분 이 매우 중요 합 니 다. 글 에 열거 한 것 은 변수 내용 의 일부분 일 뿐 이 고 시스템 내 장 된 변수 와 환경 변수, 부분 변수 간 의 전환 도 많 습 니 다. 우 리 는 언급 하지 않 았 기 때문에 우 리 는 많은 연습 과 정 리 를 해 야 합 니 다. 이렇게 많은 지식 을 기억 하지 못 하 더 라 도 능숙 하고 능숙 하 게 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.