참조 | 쉘 자습서 |
---|---|
공통 MAC 명령 라인 단말기 | |
맥에서 쉘 스크립트 |
1. 터미널은 test.sh을 만들 수 있습니다 :
(1) 지정된 폴더 경로 (예 명령 입력 cd Desktop/面向对象程序设计
)
(2) (예를 test.sh 명령 파일을 작성 touch test.sh
)
(3) 제 쉘 스크립트를 작성 :
#!/bin/bash
echo "Hello World!"
참고 : #!
스크립트가있는 쉘 사용을 수행하기 위해 통역을 필요로 어떤 시스템을 말한다 계약의 상표입니다.
echo
명령 출력 텍스트 창에 사용됩니다.
(4) 상기 단말기를 통해 실행 부기 실행 쉘 스크립트는 두 가지 방법 , 첫번째 논문은]
참고
- 입력해야
./test.sh
하는 대신,tech.sh
; - 첫 번째 오류가 발생합니다
Permission denied
먼저 입력해야chmod u+x ./test.sh //使脚本具有执行权限
다음 스크립트를 실행합니다.
2.Shelld 기본 구문 :
(1) 변수 :
① 당신이 변수를 정의 할 때, 같은 달러 기호 ($는 PHP 언어 변수가 필요)없이 변수 이름 :
your_name="Kenn"
변수 이름은 C 언어와 같은 규칙, 그러나주의 할 점은 장소가 있다는 것입니다 변수 이름과 등호 사이에 공백을 가질 수 없습니다 .
② 같은 변수만큼 변수 이름 앞에 달러 더하기 기호를 사용하는 경우 :
your_name="Kenn"
echo $your_name //或者 echo ${your_name}
중괄호 외부 변수 이름은 선택 사항, 플러스 아무것도하지 않고, 도움에 괄호가 경계 인터프리터 변수를 식별 추가합니다.
예를 들면 :
for skill in Ada Coffe Action Java; do
echo "I am good at ${skill}Script"
done
당신이 작성 기술 변수에 괄호를 추가하지 않을 경우 echo "I am good at $skillScript"
, 인터프리터는 둘 것이다 $skillScript
, 코드 실행이 우리가 다시 같은 예상 결과 아니다 (그 값이 비어있는) 변수로.
모든 변수 중괄호 추천, 이것은 좋은 프로그래밍 습관이다.
③ 정의 된 변수로서 다시 정의 할 수있다 :
your_name="Tom"
echo $your_name
your_name="Kenn"
echo $your_name
这样写是合法的,但注意,第二次赋值的时候不能写$your_name="alibaba"
,使用变量的时候才加美元符($)。
④只读变量(readonly+变量名,只读变量的值不能被改变)、删除变量(变量被删除后不能再次使用,unset 命令不能删除只读变量)。
⑤变量类型(局部变量、环境变量、shell变量)。
(2)字符串:
字符串可以用单引号,也可以用双引号,也可以不用引号。(优缺点可见参考链接)
①拼接字符串(echo $greeting $greeting_1
);
②获取字符串长度(echo ${#printf_name}
);
③提取子字符串(第一个字符的索引值为 0,与C语言规范相同,echo ${printf_name:1:5} # 输出ello,
从字符串第2个字符开始截取五个字符);
④查找子字符串(注意:以下脚本中是反引号,而不是单引号):
例:查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)
shell string="runoob is a great site" echo `expr index "$string" io` # 输出 4
(3)数组:
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
①定义数组数组名=(值1 值2 ... 值n)
:在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。还可以单独定义数组的各个分量,可以不使用连续的下标,而且下标的范围没有限制。
②读取数组:${数组名[下标]}
,使用@
符号可以获取数组中的所有元素,例如:echo ${array_name[@]}
。
③获取数组的长度:获取数组长度的方法与获取字符串长度的方法相同,例如:
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
(4)Shell 注释:
以#
开头的行就是注释,会被解释器忽略。通过每一行加一个#
号设置多行注释。
多行注释还可以使用以下格式:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF
也可以使用其他符号:
:<<'
注释内容...
注释内容...
注释内容...
'
:<<!
注释内容...
注释内容...
注释内容...
!
(5)Shell 传递参数:
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推。(其中 $0 为执行的文件名,传递的参数中如果包含空格,应该使用单引号或者双引号将该参数括起来,以便于脚本将这个参数作为整体来接收。)具体,可见参考链接。
$*
与$@
区别:
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
(6)Shell 基本运算符:
Shell 和其他编程语言一样,支持多种运算符,包括:
- 算数运算符
- 关系运算符(关系运算符只支持数字,不支持字符串,除非字符串的值是数字)
- 布尔运算符
- 字符串运算符
- 文件测试运算符
注意: - 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
- 完整的表达式要被```包含.
- 条件表达式要放在方括号之间,并且要有空格,例如: [\(a==\)b] 是错误的,必须写成 [ $a == $b ]。Shell 中的中括号用法总结
- 乘号(*)前边必须加反斜杠()才能实现乘法运算;
- 在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "" 。