开始
shell脚本必须使用#!
作为开头说明该shell需要什么解释器来执行,即使用哪一种Shell.一般的:#!/bin/bash
指令
set指令
set 指令可根据不同的需求来设置当前所使用 shell 的执行方式,同时也可以用来设置输入参数.
设置shell执行方式
设置输入参数
1 | //调用 set 是接一个或多个参数时,set 会把参数的值赋予位置参数,从 $1 开始赋值 |
字符串
1) 由单引号’ ‘包围的字符串:
任何字符都会原样输出,在其中使用变量是无效的。
字符串中不能出现单引号,即使对单引号进行转义也不行。
2) 由双引号” “包围的字符串:
如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。
字符串中可以出现双引号,只要它被转义了就行。
3) 不被引号包围的字符串
不被引号包围的字符串中出现变量时也会被解析,这一点和双引号” “包围的字符串一样。
字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。
拼接
替换
${string/substring/replacement} 仅仅替换第一次匹配
${string//substring/replacement} 替换所有的匹配
截取
从指定位置截取
1 | //string:要截取的字符串 |
从子字符串截取
1 | //#:截取第一个匹配指定子字符串右边的所有字符 |
循环
for
for in (python风格)
1 | //variable 表示变量,value_list 表示取值列表,in 是 Shell 中的关键字 |
value_list的多种形式说明:
- 直接给出具体的值,多个值空格分隔. 如: 1 2 3或”a” “b” “c”.
- 取值范围${start..end},如:${1..100},从1到100.含头含尾.
- 命令的执行结果.如: ${seq 2 2 100},从2开始每次增加2,到100结束的所有数.
- 通配符.如: *.sh,当前目录所有.sh文件
- 特殊变量.如: $#,$*,$@等