Linux -- 셸 배열 과 문자열 -- 09
배열 은 연속 적 인 변수 이 고 연속 적 인 메모리 저장 공간 입 니 다. 변수 가 너무 많은 문 제 를 해결 하기 위해 같은 변수 에서 우 리 는 여러 개의 이름 을 정의 하지 않 고 배열 의 방식 으로 정의 합 니 다.
1. 정의 배열
declare -a 定义数组
declare -A 定义嵌套的数组 --- 这个在bash中并不常用
testname=(value) 也可以定义一个空数组
2. 배열 할당
셸 에 서 는 점프 하여 값 을 부여 할 수 있 습 니 다.
testname=( )
a) testname[0]=1 ----색인 은 일반적으로 0 에서 시작 하지만 색인 이 반드시 숫자 는 아니다.
b) testname=(/var/log/*.log) /var/log 아래. log 로 끝 나 는 것 을 배열 에 넣 습 니 다.
c) testname=(“qq=123” “vx=456”…)
d) read 명령 을 통 해 값 부여: read - a 배열 에 필요 한 변수 값 입력
read -a x y z …
3. 호출 배열
${변수 이름}
${배열 이름 [색인]} 이 정의 하 는 색인 이 지정 한 값 입 니 다.
${배열 이름} 기본 호출 색인 = 0 값
${배열 이름 [*]} 또는 ${배열 이름 [@]} 배열 의 모든 값 을 호출 합 니 다.
4. 연습: 통계/var/log/*. log 에 일치 하 는 모든 파일 색인 은 짝수 파일 의 줄 수 와 같 습 니 다.
a=(/var/log/*.log)
declare -i sum=0
for i in `seq 0 7`;do
if [ $[$i%2] -eq 0];then
line=wc -l ${a[$i]} |cut -d’ ‘ -f1
sum += $line
fi
done
echo $sum
5. 배열 의 길 이 를 호출 합 니 다.
${#变量名[*]} 或者 ${#变量名[@]}
6. 배열 값 을 추가 하 는 특수 한 방식
${变量名[${#变量名[@]}]}=”值” 或 ${变量名[${#变量名[*]}]}=”值”
7. 배열 절편
${变量名[@]:偏移量:取值个数} ${a[*]:2:4} 不加取值个数就是取到最后
8. 삭제 값
unset ${变量名[索引]} 删除的是该索引数的值,其他值索引不变
9. 수정 값
덮어 쓰 면 수정
문자열
1. 포맷 출력: printf
printf "%-5s %-5s %-5s" No Name Height
printf "%-5s %-5s %-5d" 1 zhangsan 167
printf "%-5s %-5s %-5.1f" 1 zhangsan 170.5
%-5d 左对齐
2. 문자열 절편
${变量名:偏移量:数值个数} a=abcdefg ${a:2:4} ===cdef
${变量名: -数值个数} 从后往前取 冒号后面一定要有空格
${变量名:-word} 默认赋值,如果变量没有赋值,就使用默认值
3. 패턴 기반 하위 문자열
${变量名#patten} a=abcdABCabABCD ${a#a*C}===adABCD 从开头匹配删除最短匹配的子串
${变量名##pattern} a=abcdABCabABCD ${a##a*C}===D 从开头匹配删除最长匹配的子串
${变量名%pattern} a=abcdABCabABC ${a%a*C}===abcdABC 从结尾匹配删除最短匹配的子串
${变量名%%pattern} a=abcdABCabABC ${a%a*C}===空 从结尾匹配删除最长匹配的子串
4. 문자 교체
${变量名/pattern/替换的字符串} 匹配第一个pattern进行替换
a=192.168.1.1 ${a/192/72}=72.168.1.1
${变量名//pattern/替换的字符串} 匹配所有pattern进行替换
${变量名/#pattern/替换的字符串} pattern必须出现在行首,不然不替换
${变量名/%pattern/替换的字符串} pattern必须出现在结尾,不然不替换
注意:/分隔符不能换成(# % 等特殊字符)
5. 찾기 및 삭제: 바 꿀 문자열 을 지정 하지 않 습 니 다. 즉, 삭제 합 니 다.
${变量名/pattern}
${变量名//pattern}
${变量名/#pattern}
${变量名/%pattern}
6. 대소 문자 바 꾸 기
tr [:lower:] [:upper:] < filename 小写转大写
${变量名^^} 把小写转换为小写
${变量名,,} 把大写转换为小写
7. 변수 할당
变量名1=${变量名2:-word} 当变量2没有值时,赋予变量1默认word值
变量名1=${变量名2:+word} 当变量2有值时,赋予变量1默认word值
${变量名:=word} 变量没有值的时用word默认值,有值则用原来的值
变量名1=${变量名2:?error_info} 变量2没有值时,输出error_info
8. 스 크 립 트 는 다른 파일 의 변 수 를 적용 합 니 다.
vim /root/filename1
a=1
b=2
:wq
vim /root/filename2.sh
./root/filename1 #导入filename1文件
c=$[$a+$b]
echo $c
:wq
9. 두 명령
mktemp:创建临时文件以及目录,避免取的文件名重复
格式:mktemp 名字.XXXX XX代表随机数(字母和数字)
默认创建的是文件
-d 创建名字随机的目录
例如:file=`mktemp a.XXX` dir=`mktemp -d b.XXX`
install:复制或删除文件,用法和copy相同
优点是可以指定权限来复制文件
用法:
install [option] 文件 目录 复制时恢复初始权限
install [option] 目录 文件
参数:
-t 源目对换
-d 创建
-m MODE 设置权限 mask
-o OWNER 指定所属主
-g GROUP 指定所属组
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.