Shell中的变量
当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替;
变量命令规则
- 变量名和等号之间不能有空格;
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头;
- 中间不能有空格,可以使用下划线_;
- 不能使用标点符号;
- 不能使用bash里的关键字(可用help命令查看保留关键字);
变量类型
1,局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2, 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3, shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。
变量分类
普通变量:只要遵循变量的命名规则就可以定义;
只读变量:在定义了变量之后,把此变量定义成只读的(例如:readonly e),此时此变量将不能被修改也不能被删除。
内置变量
$0:表示脚本本身
$1:第一个参数
$2:第二个参数
$#:表示参数的个数
删除变量:删除变量很简单。语法为:unset 变量名 ,变量被删除,不能再次使用。注意:unset 命令不能删除只读变量。
示例
[root@dl-001 shell]# vim if.sh
#!/bin/bash
e=6 //e就是我定义的一个变量,并赋值为6
readonly e //把变量e定义成只读的;
if [ $e -gt 7 ] //使用if判断语句来判断e变量的大小
then
echo "大于7了"
elif [ $e -lt 7 ]
then
echo "小于7了"
fi
[root@dl-001 shell]# sh if.sh //执行该变量
小于7了
[root@dl-001 shell]# vim if.sh //在把变量e定义成只读的基础上更改此变量
#!/bin/bash
e=6
readonly e
e=8 //更改为8
if [ $e -gt 7 ]
then
echo "大于7了"
elif [ $e -lt 7 ]
then
echo "小于7了"
fi
[root@dl-001 shell]# sh if.sh
if.sh:行5: e: 只读变量 //可见报错,定义成只读变量时不能修改和删除;
# 用户交互模式
[root@dl-001 shell]# vim sum.sh
#!/bin/bash
read -p "第一个数:" x // read命令用于和用户交互,它把用户输入的字符串作为变量值,可以使用-t选项指定读取值时等待的时间(超出时间后自动退出脚本)。
read -p "第二个数:" y
sum=$[$x+$y]
echo "$x+$y=$sum"
[root@dl-001 shell]# sh sum.sh
第一个数:1
第二个数:2
1+2=3
变量中的字符串
单引号
str='This single quotation mark'
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号
name='haha'
str="I know your are \"$name\"! \n"
双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
获取字符串长度
str="abcdddd"
echo ${#string} #输出 7
提取子字符串
str="Extraction substring"
echo ${str:1:4} # 输出 xtra
说明:从字符串第 2 个字符开始截取 4 个字符
查找子字符串
查找字符 “t” 的位置:
str="Extraction substring"
echo `expr index "$str" t` # 输出 3
拼接字符串
name="dl"
str="hello,"$dl"!"
str_2="hello, ${dl} !"