Shell(外壳)是一个用C语言编写的程序,是用户使用的Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
脚本简单来说就是一条条的文字命令,这些文字命令式可以看到的(可以用记事本打开查看、编辑)。常见的脚本:JavaScript(前端)、VBScript、ASP、JSP、PHP(后端)、SQL(数据库操作语言)、Prel、Shell、Python、Ruby、JavaFX、Lua等。
在Linux中有很多类型的Shell,不同的Shell具备不同的功能,Shell还决定了脚本中函数的语法,Linux中默认的shell是/bin/bash,流行的shell还有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。
shell属于内置的脚本
c shell 使用的是类C语法,csh是具有c语言风格的shell,其内部的命令有52个,较为庞大,目前使用的并不多,已经被/bash/tcsh所取代。
Korn shell 的语法与Bourne shell 相同,同时具备了C shell的易用特点。需要安装的脚本都使用ksh,ksh有42条内部命令,与bash相比有一定的限制。
tcsh是csh的增强版,与C shell 完全兼容。
是一个快捷方式,已经被/bin/bash所取代
nologin 指用户不能登录
目前Linux中最复杂的一种shell,zsh有84个内部命令,使用起来也比较复杂,一般情况下,不会使用该shell、
大多数Linux系统默认使用的shell,bash shell是Bourne shell 的一个免费的版本,它是最早的Unix shell,bash还有一个特点,可以通过help命令来查看帮助,包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。
代码规范:
#!/bin/bash
# 指定解释器
shell 相关的指令
文件命令规范
文件名.sh
使用流程
案例:创建test.sh 实现第一个shell脚本程序,输出hello world
#!/bin/bash
echo "hello world!"
➜ ~ ll test.sh
-rw-r--r-- 1 root root 33 Sep 13 21:51 test.sh
➜ ~ chmod +x test.sh
➜ ~ sudo ./test.sh
hello world!
注意:这里在运行时一定要写成./test.sh ,而不是test.sh ,运行其他的二进制的程序也是一样的。直接写成test.sh ,Linux系统会去PATH里寻找test.sh 而只有/bin ,/sbin, /usr/bin、/usr/sbin 等在PATH中,你的当前目录通常不在PATH里,所以写成test.sh 不会找的命令的,要用./test.sh告诉系统说,就在当前目录下找。
什么是量:就是数据
什么是变量:数据可以发生改变的就是变量
在一个脚本周期内,其值可以发生改变的量就是变量
什么叫做一个脚本周期:一个脚本周期我们可以简单的理解为当前的shell文件。
变量是shell中不可或缺的一部分,也是最基础,最重要的组成部分。
定义形如:class name = “yunwei”
使用形如:echo $class name
变量就是由2个部分组成一个变量名,另外一个部分是变量的值
变量名和变量值的关系?
变量名和变量值是使用和被使用的关系,我们用变量名来使用变量值。
在使用变量的时候一定需要在变量名前面添加一个$符号,该要求在其他语言中也存在的(如php)
变量名的规范
注意:变量名后面的等号左右不能有空格,有可能和你熟悉的编程语言都不一样,同时变量名的使用必须遵循如下规则:
_
#!/bin/bash
str="hello world!"
echo $str
str后面不能有空间,即=左右不能有空格
双引号能够识别变量,双引号能够实现转义
单引号是不能识别变量,只会原样输出,单引号是不能转义的
定义一个变量 输出当前的时间,要求的格式为 年-月-日 时:分:秒
#!/bin/bash
str=`date +'%F %T'`
echo $str
语法:readonly 变量名
语法: read -p 提示信息 变量名
read -p '请输入需要创建的文件:' filepath
语法:unset 变量名
多个条件
if condition1
then
command1
elif condition2
then
command2
else
command3
fi
在shell中,运算符和其他编程脚本语言一样,常见的算术运算符、关系运算符、逻辑运算符、字符串运算符和文件测试运算符等。
+
加法 $a+$b
-
减法 $a-$b
*
乘法 $a\*$b
$a/$b
$a%$b
注意:条件表达式要放在方括号之间,并且要有空格,例如[$a==$b]
是错误的,必须写成[$a == $b]
支持数字,不支持字符串,除非字符串的值是数字。
运算符 | 说明 |
---|---|
-eq | 检测两个数是否相等 |
-ne | 检测两个数是否相等,不相等返回true |
-qt | 检测左边的数是否大于右边的,如果是返回true |
-lt | 检测左边的数是否小于右边的,如果是返回true |
-ge | 检测左边的数是否大于等于右边的 |
-le | 检测左边的数是否小于等于右边的 |
常用的逻辑运算符
运算符 | 说明 |
---|---|
! | 非运算符,true返回False,false返回true |
-o | 或运算符 |
-a | 与运算符 |
常用的字符串运算符
运算符 | 说明 |
---|---|
= | 用于检测两个字符串是否相等 |
!= | 检测两个字符串是否相等,不等true |
-z | 检测字符串长度是否为0 |
-n | 检测字符串长度是否为0。不为0为true |
str | 检测字符串是否为空,不空为true |
用于检测Unix/Linux文件的各种属性
属性检测描述如下:
操作符 | 说明 |
---|---|
-b file | 检测文件是否是块设备文件 |
-c file | 检测文件是否是字符设备文件 |
-d file | 检测文件是否是目录 |
-f file | 检测文件是否是普通文件,即不是目录也不是设备文件 |
-g file | 检测文件是否是SGID位 |
-k file | 检测文件是否设置了粘着位 |
-p file | 检测文件是否有管道 |
-u file | 检测文件是否设置了SUID位 |
-r file | 检测文件是否可读 |
-w file | 检测文件是否可写 |
-x file | 检测文件是否可执行 |
-s file | 检测文件是否为空 |
-e file | 检测文件(包括目录)是否存在 |
接收可以用$
加上选项对应的需要即可。
测试:编写test.sh
#!/bin/bash
echo $0 $1 $2 $3
➜ ./test.sh a b c d
./test.sh a b c
#!/bin/bash
echo $1 $2 $3
./test.sh a b c d
a b c