1、Shell是一个用C语言编写的程序,即是一种命令语言,又是一种程序设计语言
2、Shell脚本是一种shell命令编写的脚本程序,接下来关注的是Bash(易用开源)
3、#! 是一个约定的标记,表示的是系统的脚本使用的是哪种解释器来执行
echo 命令是用于向窗口输出文本
4、运行Shell脚本有两种方法:
作为可执行程序:首先应该cd到相应的目录
chmod +x ./text.sh 是脚本具有执行权限
./test.sh 执行脚本
作为解释器参数:参数就是shell脚本的文件名
/bin/sh test.sh
5、Shell变量
定义变量时,变量名不加$符号(PHP中的变量才需要加$)
注意:变量名和等号之间不能有空格;
直接赋值:user_name=“zhangsan”
语句给变量赋值:for file in 'ls /etc' 或者是 for file in $(ls /etc) 将etc下的文件夹的名称循环出来赋值给file
6、使用变量
直接在变量前边加$符号即可,可以是$user_name或者是${user_name},加{}的好处就是可以帮助识别变量的边界,例如${skill}Script和$skillScript
已经定义过的变量,可以重新被定义
7、只读变量(readonly):这种变量的值是不能被修改的,例如:readonly user_name,只能读,不能重新定义
8、删除变量(unset):unset命令不能删除只读变量,其他变量删除后不能再次使用
9、变量的类型:
局部变量:在脚本中或者命令中定义,仅在当前的实例中有效,其他的shell启动的程序不能访问
环境变量:所有的程序,包括shell启动的程序,都能访问环境变量。有些程序需要环境变量来保证其正常运行
shell变量:可以是局部变量可以是环境变量,保证了shell的正常运行
10、shell字符串:字符串可以是单引号双引号和不加引号
单引号字符串的限制:单引号里的任何字符都会原样输出,单引号中的变量是无效的;单引号中不能出现单引号(用转移符后也不行)
双引号的优点:双引号里可以有变量;双引号了可以出现转义字符
11、拼接字符串:get1="hello,"$your_name" !" 或者是 get2="hello,${user_name} !"
12、获取字符串的长度:${#user_name}
13、提取字符串:${user_name:1:4}
14、查找子字符串:查找字符串i或者o的位置(哪个字母先出现就计算哪个)
string="runoob is a great site"
echo `expr index "$string" io` 输出4,是从1开始数的
15、Shell数组:支持一维数组,不支持多维的,但是长度没有限定,数组下边从0开始
语法:数组名=(value1 value2 value3 value4),中间用空格隔开
16、读取数组:${数组名[下标]}
获取数组中所有的元素:${数组名[@]}
17、获取数组的长度:
获取数组元素的个数:${#数组名[@]} 或者 ${#数组名[*]}
获取数组单个元素的长度:${#数组名[n]}
18、Shell注释:以#开头的就是注释,
多行注释包括,:<<EOF EOF :<<' ' :<<! !
19、Shell传递参数:在执行shell脚本时,向脚本传递参数,脚本内获取的参数的格式为$n,n代表1,2,3.....,1为执行的第一个参数,2为执行的第二个参数。$0为执行的文件名
以下是特殊字符用来处理参数:
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数,如果$*用「"」括起来,以$1 $2 $3..$n的形式输出所有参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数,如$@用「"」括起来,以“$1”“¥2”...“$n”的形式输出
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态,0表示没有错误,其他任何值都表名有错
20、Shell基本运算符
例如:expr 是一款表达式计算工具,可以完成表达式的求值操作
`expr 2 + 2` 求2+2等于多少,注意使用的是反引号
同时需要注意的是:表达式和运算符之间要有空格;完整的表达式需要被`` 包含;
算数运算符:+ , - , * , / , % , == , != ;
需要注意的是*前边必须加\才能实现乘法运算;if...then...fi是条件语句;在MAC中Shell的expr语法是$((表达式))其中的*不需要转义符号\
关系运算符:只支持数字,不支持字符串,除非字符串的值是数字,结果都是布尔型的
-eq 检测两个数是否相等,相等返回true
-ne 检测两个数是否不相等,不相等返回true
-gt 检测左边的数是否大于右边的,如果是返回true
-lt 检测左边的数是否小于右边的,如果是返回true
-ge 检测左边的数是否大于等于右边的,如果是返回true
-le 检测左边的数是否小于等于右边的,如果是返回true
布尔运算符:!(非运算,表达式为true返回false) , -o(或运算,有一个表达式为true返回true) ,-a(与运算,两个表达式都为true才返回true)
逻辑运算符:&&(逻辑的and),||(逻辑的or)
字符串运算符:=(检测两个字符串是否相等),!=(检测两个字符串是否相等,不相等返回true),-z(检测字符串长度是否为0,为0返回true),-n(检测字符串长度是否为0,不为0返回true),str(检测字符串是否为空,不为空返回true)
文件测试运算符:用于检测Unix文件的各种属性
-b file: 检测文件是否是快设备文件,如果是返回true
-c file: 检测文件是否是字符设备文件,如果是返回true
-d file: 检测文件是否是目录,如果是,返回true
-f file: 检测文件是否是普通文件(既不是目录也不是设备文件),如果是返回true
-g file:检测文件是否设置来了SGID位,如果是返回true
-k file:检测文件是否设置了粘着位(Sticky Bit),如果是返回true
-p file:检测文件是否是有名管道,如果是返回true
-u file:检测文件是否设置了SUID位,如果是返回true
-r file:检测文件是否可读,如果是返回true
-w file:检测文件是否可写,如果是返回true
-x file:检测文件是否可执行,如果是返回true
-s file:检测文件是否为空(文件大小是否大于0),不为空返回true
-e file:检测文件(包括目录)是否存在,如果是返回true