Shell脚本,变量,系统预设的环境变量,位置变量,预定义变量,用户的自定义变量
一、定义变量 1、以固定的名称存放可以变化的值
2、格式为 变量名=变量值
3、取消变量的格式 unset 变量名
4、注意事项 =两边不可以有空格 不可以使用关键字作为变量名,如ls,cd 使用已经存在的变量名会覆盖原有的值 变量名称不可以使用数字开头 变量名称可以包括下划线_,参考编程语言中变量的定义时变量名的命名方法。
二、访问变量
1、$变量名 //访问变量 例如:echo $MyName
2、${变量名} //访问变量且需要接其他数据 例如:echo ${MyAge}12345
3、尝试访问未定义的变量会返回空值。
4、脚本中的变量名在脚本运行完以后被自动释放,一般不需要使用unset手动释放,一个脚本类似于编程语言中一段被{}括起来的代码段,管理变量生命周期时拥有类似“栈”的作用。
三、系统预设变量 1、环境变量 变量名通常大写,由操作系统维护
存储在/etc/profile或者~/.bash_profile 命令env可以列出所有环境变量
常见的环境变量有:PATH,PWD,USER,UID,HOME,SHELL 可以使用echo $PATH查看值 PATH用来搜索命令的路径,如果PATH的值设置为空,类似ls这样的常用命令就无法使用了。 如果在一个创建的会话中不小心修改了环境变量的值并且不知道怎么改回来,可以通过重新创建一个新会话的方法,将之前的会话中临时修改的变量恢复回来。
2、位置变量 bash内置变量,存储脚本执行时的参数 使用$n表示,n为数字序列号 例如:$1,$2,$3,$4,$5, 6 , 6, 6,{10},${12}两位数以上需要用{}括起来
作用: $num会自动对应到命令后面接的参数,例如自己创建的文本test中内容为 echo $1 echo $2 echo $3 这里的$1会自动对应到执行test命令是后面接的第一个参数,同理,$2和$3会分别对应第二个和第三个参数。 bash test aa bb cc 执行时会打印出 aa bb cc 三个参数内容,如果不输入aabbcc,就会打印三行空内容。 如果参数不够,多的参数会默认为空, 如果参数多了,只会访问指定的参数
例子:通过位置变量写一个创建用户和密码的脚本 脚本名为useradd_group,这个脚本命令传入一个参数作为创建用户的用户名,并将该用户的属组设置为用户名+group,然后使用id显示这个用户的信息。
内容为: useradd “$1” groupadd ${1}group usermod $1 -G ${1}group id $1
3、预定义变量 bash内置变量,可以调用但是不能赋值或者修改 $0:当前所在进程或脚本名,一般是命令名或或者脚本名 $$:当前运行进程的pid $?:命令执行后的返回状态,0位正常,1或其他值表示异常 $#:已加载的位置变量的个数,就是命令的参数的个数 $*:所有位置变量的值,就是命令的参数的值
想要查看与自变量的内容,使用echo就可以
4、自定义变量 用户自主设置的变量
引号用法: 双引号""允许扩展,以 引 用 其 他 变 量 单 引 号 ′ ′ 禁 用 扩 展 , 即 便 引用其他变量 单引号''禁用扩展,即便 引用其他变量单引号′′禁用扩展,即便也视为普通字符 反引号 将命令的执行输出作为变量值,$()与反引号等效
二、引号的作用: 1、将一对零散的字符整合成一个字符串,例如: touch a b c 计算机会创建三个文件,分别名为a,b,c touch “a b c” 计算机会创建一个名为"a b c" 对删除等命令,双引号作用等价
单双引号的区别 1、赋值时将值进行扩展,如果双引号中有 , 则 会 读 取 ,则会读取 ,则会读取对应的变量值 hi=“world” hia=“hello h i " e c h o " hi" echo " hi"echo"hia” 命令可以显示helloworld
echo ' h i a ′ 命 令 可 以 显 示 hia' 命令可以显示 hia′命令可以显示hia,因为单引号屏蔽特殊符号,不允许扩展,并将特殊字符视为普通字符
反引号的特性: 将命令的执行输出作为变量值,等价于 ( 命 令 ) 作 用 : 将 命 令 执 行 之 后 的 输 出 结 果 。 键 盘 上 横 排 数 字 键 1 的 左 边 就 是 反 引 号 键 。 注 意 : 反 引 号 存 放 的 命 令 属 于 是 常 亮 , 例 如 设 置 一 个 变 量 t e s t = (命令) 作用:将命令执行之后的输出结果。 键盘上横排数字键1的左边就是反引号键。 注意:反引号存放的命令属于是常亮,例如设置一个变量test= (命令)作用:将命令执行之后的输出结果。键盘上横排数字键1的左边就是反引号键。注意:反引号存放的命令属于是常亮,例如设置一个变量test=(ll),不管在任何目录下输出这个变量的值,输出的都是定义这个变量时的命令的执行结果。
三、交互式变量定义赋值: 使用read定义变量,定义但不赋值 read name 紧接着输入值,但一般需要加上 -p “提示信息” read -p “输入名称:” iname
将read命令放在脚本中,可以与用户进行交互 read -p “INPUTNAME:” name read -p “INPUTGROUP:” group useradd $name -G $group id $name
如果是输入密码之类的信息,可以在read后面加上-s参数,就是密文输入了,注意-s要紧跟着read命令。
如果是输入有时限,可以在read后面接-t secs来设置输入的时间
全局变量和局部变量: 局部变量: 新定义的变量默认只在当前shell环境中有效,无法在子shell环境(子进程)中使用 例如: x=10 sh //进入sh,这个sh就是开启它的bash的子shell echo $x //x没有值
全局变量在当前shell及子shell中均有效 定义全局变量的方法: export x=10 这个x就会成为全局变量
Shell脚本 环境变量 位置变量 预定义变量 自定义变量 单引号双引号反引号用法 一般变量和交互式变量read定义 密文输入变量信息