shell简介
是应用程序,该程序提供了一个界面,用户通过这个界面访问操作系统内核服务。
linux的shell分类:
- Bourne Shell (/usr/bin/sh或、/bin/sh)
- Bourne again Shell (/bin/bash)—最常用 - c shell(/usr/bin/csh)
- k shell(/usr/bin/ksh)
例子
#!/bin./bash
echo "Hello World!"
注: #! 是一个约定的标记,他告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。
运行Shell脚本有两种方法:
(shell脚本的文件后缀以 .sh 结尾)
1.作为可执行程序
chmod +x ./test.sh #使脚本具有执行权限.
./test.sh #执行脚本 ,必须进入当前目录
2.作为解释器参数
直接运行解释器,其参数是shell脚本的文件名
例:
./bin/sh test.sh
./bin/php test.php
1.shell变量
定义变量
例:your_name="runoob.com"
注:
- 命令只能是英文字母、数字、下划线。且首个字母不能是数字开头。
- 中间不能有空格,可以使用下划线。
- 不能使用标点符号。
- 不能使用bash里的关键字。
使用变量
使用定义过的变量,只需在变量前加美元符号即可。如:
your_name="qingjx"
echo $your_name
echo ${your_name}
注:变量名花括号是可选的,主要目的为了帮助解释器识别变量的边界。
只读变量
使用readonly 命令可以将变量定义为制度,只读变量的值不能被改变。
例:
myUrl="http://www.baidu.com"
readonly myUrl
删除变量
使用unset命令可以删除变量。删除后的变量,不能再次使用。但unset不能删除readonly变量。
unset myUrl
变量类型:
- 局部变量
- 环境变量
- shell变量
shell字符串
字符串是最常用的数据类型之一,字符串可以使用单引号(1.单引号中的所有字符都会原样输出,即其中的变量值无效。2.单引号中不能出现单独的单引号,但可以出现成对的单引号),也可以是双引号(双引号中可以有变量,也可以出现转义字符)。
例:
str='hello world'
name="bob,\"$str\" \n"
bob,hello world
拼接字符串
双引号:
your_name=“runoob”
greeting="hello, “$your_name”! "
greeting_1="hello, ${your_name}! "
echo $greeting $greeting_1
结果:
hello, runoob! hello,runoob!
单引号:
greeting_2='hello, '$your_name' ! '
greeting_3='hello,'${your_name} ' ! '
echo greeting_2 greeting_3
结果:
hello,runoob! hello,${your_name}!
获取字符串长度
string="abcd"
echo ${#string} #输出4
提取子字符串
string="runoob is a great site"
echo ${string:1:4} #输出unoo
查找子字符串
查找字符i或o的位置(那个字母先出现就计算哪个)
string="runoob is a great site"
echo `expr index "$string" io` #输出4
注:脚本中`是反引号。
Shell数组
bash只支持一位数组,且没有限制数组的大小。
定义数组
在shell命令中,用括号表示数组,数组元素用“空格”符号割开。
语法:数组名=(值1 值2 值3....)
或者
array_name=(
value0
value1
value2
value3
)
还可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
注:可以不适用连续的下标,而且下标的范围没有限制。
读取数组
读取数组的一般格式:${数组名[下标]}
例:valuen=${array_name[n]}
echo ${array_name[@]} # @、*可以获取数组中的所有元素
获取数组的长度:和获取字符串的方法相同
length=${#array_name[@]} #取得数组元素的个数
lengthn=${#array_name[n]} #取得数组单个元素的长度
Shell注释:
- 单行注释: #开头的行就是注释
- 多行注释:
:<<EOF
......
EOF
或
:<<'
......
.