把稳,变量名和等号之间不能有空格,这可能和你熟习的所有编程措辞都不一样。同时,变量名的命名须遵照如下规则:
命名只能利用英笔墨母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以利用下划线(_)。
不能利用标点符号。
不能利用bash里的关键字(可用help命令查看保留关键字)。
有效的 Shell 变量名示例如下:
RUNOOBLD_LIBRARY_PATH_varvar2
无效的变量命名:
?var=123username=runoob
除了显式地直接赋值,还可以用语句给变量赋值,如:
for file in `ls /etc`
以上语句将 /etc 下目录的文件名循环出来。
利用变量
利用一个定义过的变量,只要在变量名前面加美元符号即可,如:
your_name=\公众qinjx\"大众echo $your_nameecho ${your_name}
变量名表面的花括号是可选的,加不加都行,加花括号是为了帮助阐明器识别变量的边界,比如下面这种情形:
for skill in Ada Coffe Action Java; do echo \"大众I am good at ${skill}Script\"大众done
如果不给skill变量加花括号,写成echo \"大众I am good at $skillScript\"大众,阐明器就会把$skillScript当成一个变量(其值为空),代码实行结果就不是我们期望的样子了。
推举给所有变量加上花括号,这是个好的编程习气。
已定义的变量,可以被重新定义,如:
your_name=\公众tom\"大众echo $your_nameyour_name=\"大众alibaba\"大众echo $your_name
这样写是合法的,但把稳,第二次赋值的时候不能写$your_name=\"大众alibaba\"大众,利用变量的时候才加美元符($)。
只读变量
利用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子考试测验变动只读变量,结果报错:
#!/bin/bashmyUrl=\"大众http://www.w3cschool.cc\"大众readonly myUrlmyUrl=\"大众http://www.runoob.com\公众
运行脚本,结果如下:
/bin/sh: NAME: This variable is read only.
删除变量
利用 unset 命令可以删除变量。语法:
unset variable_name
变量被删除后不能再次利用。unset 命令不能删除只读变量。
实例
#!/bin/shmyUrl=\"大众http://www.runoob.com\"大众unset myUrlecho $myUrl
以上实例实行将没有任何输出。
变量类型
运行shell时,会同时存在三种变量:
1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序须要环境变量来担保其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量 shell变量是由shell程序设置的分外变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量担保了shell的正常运行
Shell 字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的差异跟PHP类似。
单引号
str='this is a string'
单引号字符串的限定:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能涌现单引号(对单引号利用转义符后也弗成)。
双引号
your_name='qinjx'str=\公众Hello, I know your are \\公众$your_name\\"大众! \n\公众
双引号的优点:
双引号里可以有变量
双引号里可以涌现转义字符
拼接字符串
your_name=\公众qinjx\"大众greeting=\"大众hello, \公众$your_name\"大众 !\"大众greeting_1=\"大众hello, ${your_name} !\公众echo $greeting $greeting_1
获取字符串长度
string=\公众abcd\公众echo ${#string} #输出 4
提取子字符串
以下实例从字符串第 2 个字符开始截取 4 个字符:
string=\"大众runoob is a great site\公众echo ${string:1:4} # 输出 unoo
查找子字符串
查找字符 \"大众i 或 s\"大众 的位置:
string=\公众runoob is a great company\"大众echo `expr index \"大众$string\公众 is` # 输出 8
把稳: 以上脚本中 \公众`\"大众 是反引号,而不是单引号 \公众'\公众,不要看错了哦。
Shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似与C措辞,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或即是0。
定义数组
在Shell中,用括号来表示数组,数组元素用\"大众空格\"大众符号分割开。定义数组的一样平常形式为:
数组名=(值1 值2 ... 值n)
例如:
array_name=(value0 value1 value2 value3)
或者
array_name=(value0value1value2value3)
还可以单独定义数组的各个分量:
array_name[0]=value0array_name[1]=value1array_name[n]=valuen
可以不该用连续的下标,而且下标的范围没有限定。
读取数组
读取数组元素值的一样平常格式是:
${数组名[下标]}
例如:
valuen=${array_name[n]}
利用@符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:
# 取得数组元素的个数length=${#array_name[@]}# 或者length=${#array_name[]}# 取得数组单个元素的长度lengthn=${#array_name[n]}
Shell 注释
以\公众#\"大众开头的行便是注释,会被阐明器忽略。
sh里没有多行注释,只能每一行加一个#号。只能像这样:
#--------------------------------------------# 这是一个注释# author:菜鸟教程# site:www.runoob.com# slogan:学的不仅是技能,更是梦想!
#--------------------------------------------##### 用户配置区 开始 ######## 这里可以添加脚本描述信息# ###### 用户配置区 结束 #####
如果在开拓过程中,碰着大段的代码须要临时注释起来,过一下子又取消注释,怎么办呢?
每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会实行,达到了和注释一样的效果。