Shell 기본 동작
1. 기초
1.1 함수 매개 변수
매개 변수 처리
설명 하 다.
$#
스 크 립 트 에 전 달 된 매개 변수 개수
$*
스 크 립 트 에 전 달 된 모든 인 자 를 단일 문자열 로 표시 합 니 다.
$$
스 크 립 트 가 실행 중인 현재 프로 세 스 ID 번호
$!
백그라운드 에서 실행 중인 마지막 프로 세 스 의 ID 번호
$@
$* 와 같 지만 사용 할 때 따옴표 를 추가 하고 따옴표 에서 매개 변 수 를 되 돌려 줍 니 다.
$?
마지막 명령 의 종료 상 태 를 표시 합 니 다.0 은 오류 가 없 음 을 나타 내 고 다른 값 은 오류 가 있 음 을 나타 낸다.
PS: $@ 과 $의 차이 점: (1) 방문 할 때 argA = $@ 이 라 고 쓰 면;argB = $, argA 는 argB 와 같 습 니 다.(2) 방문 할 때 argA = "$@"이 라 고 쓰 면;argB = "$*"는 argA 를 매개 변수 로 하 는 목록 이 고 argB 는 모든 매개 변 수 를 하나의 전체 로 하고 긴 문자열 로 생각 합 니 다.
또한 매개 변수 개수 가 9 보다 많 을 때 가 져 온 매개 변 수 는 괄호 를 쳐 야 합 니 다. 예 를 들 어 ${10}
1.2 '와 $() 에 대하 여
http://www.cnblogs.com/chengd/p/7803664.html bash 에서 $() 와
(反引号)都是用来作命令替换的。
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。
优缺点:
(1) : $(): 该种写法更容易读,而``容易看错。
(2): $( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的
1.3 $var与${var}
$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围
另外,关于${}符号的特殊用法
1.3.1 取路径、文件名、后缀
先赋值一个变量为一个路径,如下:
file=/dir1/dir2/dir3/my.file.txt
命令 解释 结果
${file#*/} 拿掉第一条 / 及其左边的字符串 dir1/dir2/dir3/my.file.txt
[root@localhost ~]# echo ${file#*/}
dir1/dir2/dir3/my.file.txt
${file##*/} 拿掉最后一条 / 及其左边的字符串 my.file.txt
[root@localhost ~]# echo ${file##*/}
my.file.txt
${file#*.} 拿掉第一个 . 及其左边的字符串 file.txt
[root@localhost ~]# echo ${file#*.}
file.txt
${file##*.} 拿掉最后一个 . 及其左边的字符串 txt
[root@localhost ~]# echo ${file##*.}
txt
${file%/*} 拿掉最后一条 / 及其右边的字符串 /dir1/dir2/dir3
[root@localhost ~]# echo ${file%/*}
/dir1/dir2/dir3
${file%%/*} 拿掉第一条 / 及其右边的字符串 (空值)
[root@localhost ~]# echo ${file%%/*}
(空值)
${file%.*} 拿掉最后一个 . 及其右边的字符串 /dir1/dir2/dir3/my.file
[root@localhost ~]# echo ${file%.*}
/dir1/dir2/dir3/my.file
${file%%.*} 拿掉第一个 . 及其右边的字符串 /dir1/dir2/dir3/my
[root@localhost ~]# echo ${file%%.*}
/dir1/dir2/dir3/my
记忆方法如下:
# 是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边)
单一符号是最小匹配;两个符号是最大匹配
*是用来匹配不要的字符,也就是想要去掉的那部分
还有指定字符分隔号,与*配合,决定取哪部分
1.3.2 取子串及替换
命令 解释 结果
${file:0:5} 提取最左边的 5 个字节 /dir1
${file:5:5} 提取第 5 个字节右边的连续 5 个字节 /dir2
${file/dir/path} 将第一个 dir 提换为 path /path1/dir2/dir3/my.file.txt
${file//dir/path} 将全部 dir 提换为 path /path1/path2/path3/my.file.txt
${#file} 获取变量长度 27
1.3.3 根据状态为变量赋值
命令
解释
备注
${file-my.file.txt}
若 $file 没设定,则使用 my.file.txt 作传回值
空值及非空值不作处理
${file:-my.file.txt}
若 $file 没有设定或为空值,则使用 my.file.txt 作传回值
非空值时不作处理
${file+my.file.txt}
若$file 设为空值或非空值 ,均使用my.file.txt作传回值
没设定时不作处理
${file:+my.file.txt}
若 $file 为非空值,则使用 my.file.txt 作传回值
没设定及空值不作处理
${file=txt}
若 $file 没设定,则回传 txt ,并将 $file 赋值为 txt
空值及非空值不作处理
${file:=txt}
若 $file 没设定或空值,则回传 txt ,将 $file 赋值为txt
非空值时不作处理
${file?my.file.txt}
若 $file 没设定,则将 my.file.txt 输出至 STDERR
空值及非空值不作处理
${file:?my.file.txt}
若 $file没设定或空值,则将my.file.txt输出至STDERR
非空值时不作处理
PS: 中间有=号的,是对file变量赋值;
中间是?的是设定输出的
中间是+或-的是,是影响的${}的整体赋值 如,var=${flag-d},影响的是var的值。
1.4 算数运算
在Bash的算术运算中有以下几种方法:
名称
语法
范例
算术扩展
((算术式))
r=((1+2*3))
使用外部程序expr
expr 算术式
r=expr 1+2*3
사용 []
[산술 식]
r=$[1+2]
내 장 된 명령 사용
declare - i 변수 = 산술 식
declare -i r=1+2*3
내 장 된 명령 let 사용 하기
let 산술 식
let r=1+2
판정
1.2.1 공동 판정
-a: and -o: or !: ... 이 아니다
1.2.2 정수 비교-eq 测试两个整数是否相等
-ne 测试两个整数是否不等
-gt 测试一个数是否大于另一个数
-lt 测试一个数是否小于另一个数
-ge 大于或等于
-le 小于或等于
명령 간 의 논리 관계 논리 와: & & 첫 번 째 조건 은 가짜 이 고 두 번 째 조건 은 판단 하지 않 아 도 됩 니 다. 가장 전체적인 결 과 는 첫 번 째 조건 이 진실 이 고 두 번 째 조건 은 반드시 판단 해 야 합 니 다.
논리 또는: | |
1.2.3 문자열 비교== 等于 两边要有空格
!= 不等
> 大于
< 小于
1.2.4 파일 테스트-z string 测试指定字符是否为空,空着真,非空为假
-n string 测试指定字符串是否为不空,空为假 非空为真
-e FILE 测试文件是否存在
-f file 测试文件是否为普通文件
-d file 测试指定路径是否为目录
-r file 测试文件对当前用户是否可读
-w file 测试文件对当前用户是否可写
-x file 测试文件对当前用户是都可执行
-z 是否为空 为空则为真
-a 是否不空
2. 배열
2.1 배열 만 들 기
배열 정의, 중간 에 빈 칸 분할: array = ("val 1"val 2 ") 기 존 배열 에 따라 새로운 배열 을 만 듭 니 다: newarry = (${array 1 [@]} ${array 2 [@]})
2.2 배열 요소 접근
(1) 단일 원소 arr 방문number [$index] = 100 (index 가 경 계 를 넘 으 면 새 할당 값 이 배열 의 끝 에 추 가 됩 니 다)
(2) 블록 접근 블록 접근 형식 은: ${배열 이름 [@ 또는 *]: 시작 아래 표시: 끝 아래 표시} 입 니 다. 아래 표 시 를 끝 내 는 요 소 는 포함 되 지 않 습 니 다.
2.3 삭제
어떤 요 소 를 삭제 합 니 다: unset arr number [1]. 아래 표 시 된 배열 을 삭제 합 니 다.
전체 배열 비우 기: unset arr number;
3. 관련 배열 (map)
3.1 창설
declare -A arraymap
3.2 배열 요소 할당
maparray=(lucy]=beijing [yoona]=shanghai) maparray[key]=value
3.3 옮 겨 다 니 기
키 목록 가 져 오기: ${! maparray [*]}
5. 순환
5.1 for
기본 모드:for var in list ; do
commands
done
C 스타일 의:for (( i = 0; i < 10; i++ ));do
commands
done
5.2 while while command;do
commands
done
6 기타
6.1 ssh 에 대하 여
(1) 원 격 으로 명령 ssh 실행user@host"cmd"(2) 여러 명령 을 원 격 으로 실행 하고 여러 명령 을 원 격 으로 실행 할 때 명령 이 5 개 정도 면 명령 집합 을 ""로 감 싸 고 명령 사이 에 점 수 를 붙 여 실행 할 수 있 습 니 다.(expect 에서 ssh 를 실행 하면 잘못된 것 같 습 니 다. 첫 번 째 문장 만 이해 할 수 있 습 니 다. ssh 가 - t 인 자 를 추가 하거나 ssh 를 사용 해 야 하 는 지 아 닙 니까?user@hostbash - c 모드? 확실 하지 않 습 니 다. 나중에 ssh 인 자 를 모두 보 세 요. 여기 가 잘 모 르 는 것 같 습 니 다.) 명령 이 많 을 때 명령 을 스 크 립 트 에 쓰 고 ssh 를 통 해 이 스 크 립 트 를 실행 하 는 것 이 좋 습 니 다.
스 크 립 트 는 로 컬 과 원 격 기기 에 있 습 니 다. 스 크 립 트 는 로 컬 에 있 습 니 다.
ssh user@host< scriptName 스 크 립 트 에 인 자 를 입력 하려 면 bash 에 - s 인 자 를 지정 해 야 합 니 다.
ssh user@host ‘bash -s’ < scriptName helloworld
원 격 대상 기 에서 스 크 립 트 sshuser@host “/home/scriptName”
매개 변수: sshuser@host/home/nick/test.sh helloworld
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
NFA 의 확정 화
1. 이번 실험 을 통 해 정규 표현 식, NFA, DFA 와 그 가 식별 하 는 언어 에 대한 이 해 를 강화 합 니 다.
2. NFA 에서 DFA 로 의 전환 을 파악 하고 부분 집합 법 으로 NFA 를 DFA ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
좋은 웹페이지 즐겨찾기