理解
shell 脚本可以理解为由程序帮我们在命令行中敲命令。敲命令的逻辑,顺序由shell脚本决定
注释
单行注释
在shell脚本中可以使用 # 来注释,类似js中的 //
# 这是一个注释
多行注释
多行注释以:<<'注释内容'和注释内容后跟的结束标记来表示。例如:
:<<'COMMENT'
这是多行注释
这是多行注释
这是多行注释
COMMENT
变量
变量直接写就好,没有定义的过程,当我们需要给一个变量赋值的时候就直接写变量名=值,当我们需要读取某个变量的值的时候就需要用$变量的形式读取
# 给变量var赋值
var=12
# 打印var的值
echo $var
这将会打印 12
echo 是一个命令,会输出参数值,可以尝试在终端中输入 echo message 将会输出message
只读变量
只读变量是指不能被修改的变量 看声明方式
var=12
# 将变量变成只读变量
readonly var
如果给只读赋值将会报错
删除变量
unset
var=12
# 删除var
unset var
变量类型
局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
换句话说就是在shell脚本 运行的时候定义的,只在脚本运行期间生效,当shell脚本运行结束之后,这些变量将会直接被释放。在shell脚本中,可以使用 local 关键字将变量声明为局部变量。 local 只能在函数中使用
demoFun(){
str=123;
echo "我是一个函数"$str
}
demoFun
# 函数外面也能访问,因为函数内部定义的str是一个shell变量
echo $str;
打印
是一个函数123
123
如果只想让str在函数内部生效,那么就加local关键字,表示str是一个局部变量
shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。
换句话说,在shell脚本执行期间都能访问的变量,可能是自己定义的变量,也可能是环境变量
环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
使用 export 将shell脚本的变量变为环境变量
Shell 字符串
字符串可以用""双引号表示,也可以用单引号表示,两者有如下区别
- 单引号中的内容会被原样输出,不会进行变量替换和转义字符的转换。例如,
echo 'hello $USER'会输出hello $USER,而不是hello和当前用户的用户名。 - 双引号中的内容会进行变量替换和转义字符的转换。例如,
echo "hello $USER"会输出hello和当前用户的用户名。 - 双引号中可以使用 $()或``来执行命令,并将命令的输出结果嵌入到字符串中。例如,
echo "The date is $(date)"会输出The date is和当前日期。双引号中可以使用反斜杠来转义特殊字符,例如表示换行符。而单引号中的反斜杠只是一个普通的字符,不会进行转义。
因此,如果需要进行变量替换或者嵌入命令输出结果,应该使用双引号。如果不需要进行变量替换或者转义字符的转换,应该使用单引号。
# 单引号中的内容会被原样输出,不会被解析
echo 'Hello $USER, today is $(date)'
# 双引号中的内容会被解析,可以包含变量和命令替换
echo "Hello $USER, today is $(date)"
字符串拼接
可以使用双引号或者单引号来拼接字符串。使用双引号可以在字符串中使用变量和命令替换,而使用单引号则不会解析其中的内容。以下是两种方式的示例代码:
str1="Hello"
str2="World"
result="$str1 $str2"
echo $result
使用双引号拼接字符串:
str1='Hello'
str2='World'
result=$str1' '$str2
echo $result
字符串长度
可以使用${#string}来获取字符串的长度,其中string是要获取长度的字符串变量。以下是示例代码:
str="Hello World"
echo ${#str}
输出结果为11,因为字符串中有11个字符。
子串
可以使用${string:position:length}来获取字符串的子串,其中string是要获取子串的字符串变量,position是子串的起始位置(从0开始),length是子串的长度。以下是示例代码:
echo ${"abcdefg":1:5}
这将输出 bcdef
Shell 数组
在Shell中,可以使用以下语法来定义数组:
array_name=(value1 value2 ... valuen)
其中,array_name 是数组的名称,value1、value2、...、valuen 是数组中的元素。
例如,定义一个包含三个元素的数组:
my_array=(apple banana orange)
也可以使用下标来访问数组中的元素,例如:
echo ${my_array[0]} # 输出:apple
echo ${my_array[1]} # 输出:banana
echo ${my_array[2]} # 输出:orange
可以使用 ${#array_name[@]} 来获取数组的长度,例如:
echo ${#my_array[@]} # 输出:3
可以使用 ${array_name[@]} 来获取数组中的所有元素,例如:
echo ${my_array[@]} # 输出:apple banana orange
也可以使用 ${array_name[*]} 来获取数组中的所有元素,例如:
echo ${my_array[*]} # 输出:apple banana orange
以上就是Shell中定义数组的方法和常用操作。