- 类型
- 字符串
- 单引号
- 单引号里的任何字符都会原样输出, 单引号字符串中的变量是无效的
- 双引号
- 双引号字符串内可以有变量
- 双引号里可以出现转义字符
- 数字
- 变量:
- 定义变量时,等号两边不能留有空格;
- 语句给变量赋值:etc=$(ls /etc)
- 变量可以多次赋值
- 只读变量:
etc=$(ls /etc) \n readonly etc
- 删除变量:
unset etc
- 变量类型:
- 内置变量:
-
$n: n为数字
./test.sh 1 2 3
-
$0: 为执行的文件名: test.sh
-
$1 $2, 分别为执行脚本时传递的第1、2个变量: 1,2
-
$# : 传递的数量
-
$* : 所有参数,如”$*"用「"」括起来的情况时所有参数会形成一个字符串。
-
$@ : 与 $*作用相同,用双引号时,会返回数组形式
-
$*与$@ 区别:
- 都是所有参数
-
./test.sh 1 2 3,”$*”等价与"1 2 3”[一个参数],"@" 等价于 "1" "2" “3”[三个参数],在for循环时有不同表现。
-
$$ : 脚本运行的当前进程ID号
-
$? : 显示最后命令的退出状态。0表示没有错,其他值则表示出错。
- 数组
- 只支持一维数组,从0开始索引
- 括号表示数组,用空格分开:数组名=(值1 值2 ... 值n)
- 数组索引:
valuen=${array_name[n]}, 0开始;
- 用 @ 符号可以获取数组中的所有元素:
echo ${array_name[@]}
- 数组元素个数:
length=${#array_name[@]}或者length=${#array_name[*]}
- 数组元素长度:
lenght=${#array_name[n]}
- 关联数组:
- 类似Python中的字典类型,有key有value
- 自定义:
declare -A array_site=([“google”]=“www.google.com” [“baidu”]=“www.baidu.com")
- 先声明在定义:
declare -A array_site … array_site[“google”]=“www.google.com”
- 同样可以索引,取长度, 取
value值${array_name[@]},取键值${!site[*]}
- 字符串
- 自定义函数
- 两种方式:大括号{ } 两边必需有空格隔开。
- 先定义在使用
- 单行模式时,在最后的一个命令一定要加分号“;”
- 变量:默认是全局变量,函数内部变量要加local
- 函数返回值:0-255
- Bash 函数没有返回值功能,当一个bash函数执行完之后,返回最后一条命令执行的状态
- 最后一条命令执行成功,则返回0;不成功则返回1-255的数字
- 也可以用return返回特定的1-255的数字
- 函数返回值的值,用$?变量获取
- 返回字符串:
- 入股需要返回字符串,则需要将返回值通过echo输出出来
- 传参给到函数、shell脚本
- 位置参数: $0 $1 $2… $n ;$0是函数名称或者脚本名称
- $# 参数个数
-
$* $@所有参数
- 不加引号时,两者意思相同
- $添加双引号:“$” :会将所有参数展开为一个字符串,并按空格分开,如“$1 $2 $3”
-
$@添加双引号:“$@”: 会将所有参数展开为字符串数组,如”$1” “$2” “$3”..
- 内置函数
- 字符串长度:
echo ${#string}
- 字符串切片:
echo ${string:1:4} 从字符串第 1 个字符开始截取 4 个字符(索引从0开始)
- 字符串查找:
echo expr index “$string” io ## i 或 o 的位置(哪个字母先出现就计算哪个)
set -e # 如果脚本执行过程,有遇到命令出错的代码,则触发中断,不会往下执行。
var1=‘a'
var2=‘b'
Myfunc (){
Local var1=‘c’ # 局部变量
var2=‘d’ # 此处会修改全局定义的var2值
Command
}
# 单行模式:
Myfunc() { command; }
# 带function的函数
function myfunc {
Command;
return 33
}
function myfunc2 { command; }
myfunc
echo $? # 输出返回的33
myfunc2
echo $? # 如果myfunc2最后一条指令出错,$?则不为0
my_function () {
local func_result="some result"
echo "$func_result"
}
func_result="$(my_function)” # 此处会将函数的echo值,通过$()赋值给到func_result变量
echo $func_result