Shell变量
- 定义变量时,变量名不加$(美元符号)
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
- 中间不能有空格,可以使用下划线(_)
- 不能使用标点符号
- 不能使用bash里面的关键字(可用help查看保留关键字)
- 变量的类型
- 局部变量
- 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
- 环境变量
- 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行
- shell变量
- shell变量是由shell程序设置的特殊变量,shell变量中有一部分是环境变量,有一部分是局部变量
- 局部变量
-
#变量的声明 name="zhangsan" #变量的调用 echo $name echo ${name} #只读变量 /bin/sh:NAME:This variable is read only url="https://www.google.com" readonly url url="https://www.runoob.com" #删除变量 unset name
Shell字符串
- 字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号
- 单引号
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
- 单引号字符串中不能出现单独一个单引号,但可成对出现,作为字符串拼接使用
- 双引号
- 双引号里可以有变量
- 双引号里可以出现转义字符
-
#声明字符串 str1="hello world 1" str2="hello world 2" #字符串拼接------双引号 name="helloworld" name1="hello,"$name" !" name2="hello,${name} !" #字符串拼接------单引号 passwd='123456' passwd1='hello, '$passwd' !' passwd2='hello, ${passwd} !' echo $passwd2 #字符串的长度 email='123456@qq.com' echo ${#email} echo ${email:1:4}
Shell数组
- bash支持一维数组(不支持多维数组),并且没有限定数组的大小(伪数组,模拟出来的)
- 数组元素的下标由0开始编号,获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值大于或等于0
-
#定义数组 括号来表示数组数组元素用“空格”符号隔开 数组名=(值1 值2 ... 值n) favs=("足球" "篮球" "乒乓球" "保龄球") #读取数组 ${数组名[下标]} fav=${favs[1]} #使用 @ 符号可以获取数组中所有的元素 echo ${favs[@]} 获取数组的长度 length1=${#favs[@]} length2=${#favs[*]}
Shell注释
- 以 # 开头的行就是注释,会被解释器忽略
- 通过每一行设置 # 号设置多行注释
-
#------------------------------------------------------ #这是一个注释 #author: #site: #------------------------------------------------------ ##### 服务器配置-start ##### # # # # # ##### 服务器配置-end ##### #特殊的多行注释 :<<EOF(end of file) 注释内容... 注释内容... 注释内容... EOF #EOF改成abcd等任意的都可以,只是结尾也要对应上abcd等 :<<abcd 注释内容... 注释内容... 注释内容... abcd :<<! 注释内容... 注释内容... 注释内容... !
Shell参数传递
- 执行shell脚本时,向脚本传递参数,脚本内获取参数的格式为:$n(n代表一个数字)
-
参数处理 参数说明 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $? 显示最后命令的状态。0表示没有错误,其他任何值表示有错误 $0 执行的文件名 -
#! /bin/bash echo "shell 传递参数实例"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3"; echo "参数长度:$#"; echo "所有参数:$*"; echo "当前进程ID号:$$"; echo "后台运行最后一个进程ID号:$!"; echo "命令状态:$?"; echo "结束------------";