Shell basic
一、Shell 变量
1.定义变量
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
your_name="w3cschool.cc"
注意,变量名和等号之间不能有空格
除了显式地直接赋值,还可以用语句给变量赋值,如:
for file in `ls /etc`
以上语句将 /etc 下目录的文件名循环出来
2.使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可
your_name="qinjx"
echo $your_name
echo ${your_name}
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况
for skill in Ada Coffe Action Java do
echo "I am goodat ${skill}Script"
done
已定义的变量,可以被重新定义,如:
your_name="tom"
echo $your_name
rootrrryour_name="alibaba"
echo $your_name
这样写是合法的,但注意,第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)
3.Shell 字符串
单引号:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号:
双引号里可以有变量
双引号里可以出现转义字符
拼接字符串:
your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
获取字符串长度:
string="abcd"
echo ${#string} #输出 4
提取子字符串
string="alibaba is a great company"
echo ${string:1:4} #输出liba
查找子字符串
string="alibaba is a great company"
echo `exprindex "$string" is`
4.Shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。数组元素的下标由0开始编号
用括号来表示数组,数组元素用"空格"符号分割开
数组名=(值1 值2 ... 值n)
array_name=(value0 value1 value2 value3)
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
*可以不使用连续的下标,而且下标的范围没有限制。
读取数组:${数组名[下标]}
使用@符号可以获取数组中的所有元素,例如:echo${array_name[@]}
获取数组的长度:
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
5.Shell注释
以"#"开头的行就是注释,shell里没有多行注释
可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果
二、Shell test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
数值测试:
参数 |
说明 |
-eq |
等于则为真 |
-ne |
不等于则为真 |
-gt |
大于则为真 |
-ge |
大于等于则为真 |
-lt |
小于则为真 |
-le |
小于等于则为真 |
字符串测试:
参数 |
说明 |
= |
等于则为真 |
!= |
不相等则为真 |
-z 字符串 |
判定字串是否为0? ,若 string 为空字串,则为 true |
-n 字符串 |
判定字串是否非为 0 ?,若 string 为空字串,则为 false。 注: -n 亦可省略 |
文件测试:
参数 |
说明 |
-e 文件名 |
如果文件存在则为真 |
-r 文件名 |
如果文件存在且可读则为真 |
-w 文件名 |
如果文件存在且可写则为真 |
-x 文件名 |
如果文件存在且可执行则为真 |
-s 文件名 |
如果文件存在且为『非空白文件』则为真 |
-d 文件名 |
如果文件存在且为目录则为真 |
-f 文件名 |
如果文件存在且为普通文件则为真 |
-c 文件名 |
如果文件存在且为字符型特殊文件则为真 |
-b 文件名 |
如果文件存在且为块特殊文件则为真 |
-l 文件名 |
该『档名』是否存在且为一个连结档 |
逻辑操作符:
参数 |
说明 |
-a |
(and)两状况同时成立!例如 test -r file -a -x file,则 file 同时具有 r 与 x 权限时,才回传 true。 |
-o |
(or)两状况任何一个成立!例如 test -r file -o -x file,则 file 具有 r 或 x 权限时,就可回传 true。 |
! |
反相状态,如 test ! -x file ,当 file 不具有 x 时,回传 true |