什么是shell:
shell又叫做命令解释器,他可以识别用户输入的各种命令,并且传递给操作系统,他的作用类似于windows操作系统中的命令行,但是shell的功能远比命令行强大的多,在unix或者localhost中,shell既是用户交互界面,也是控制系统的脚本语言。
shell脚本的基本元素:
- 声明:声明使用来解释用哪个命令解释器来解释并且执行当前脚本文件中的语句,一班写的解释器是“#!/bin/bash”
- 命令:可执行的语句,实现程序的功能。
- 注释:说明某些代码的功能,通过在代码中添加注释,增加了代码的可读性。
1)单行注释:以#开头的一整行都是注释
#comment1
#comment2
2)多行注释:使用冒号,配合here document可以实现多行注释
:<<BLOCK
…注释内容
BLOCK
基本语法
echo命令
echo命令的作用是在屏幕前输入一行文本,可以将该命令的参数原样输出。
echo后可以跟的参数
-n参数:不换行的输出内容
-e参数:解析转义字符
转义字符:
转义字符 | 说明 |
---|---|
\n | 换行 |
\r | 回车 |
\t | 制表符 |
\b | 退格 |
\v | 纵向制表符 |
命令格式
shell命令的基本都是以下格式:
1.command [ arg 1 …[ argN ] ]:command是具体的命令或者一个可以执行文件,arg1 。。。 argN是传递给命令的参数,他们是可选的。
2.comment foo bar:foo和bar中间有个空格,所以bash认为这是两个参数,但是当有多个空格的时候,bash会自动忽略空格。
3.分号:在一个命令行中输入多个命令可以使用“;”来隔开:
当在命令行中想要先清屏在查询当期目录下的文档,使用命令:**clear ; ll **
结果就是:先进行清屏,然后再进行查询
3.命令组合符&&和||:**&&表示且,||**表示或者。
&&:cat filetlist.txt && ls -l filelist.txtb
只有前面那条命令执行成功才会执行后面一个任务,而使用分号的时候是不论前面指令的执行是否成功,都会执行后面那条指令。
||:mkdir foo || mkdir bar
只有mkdir foo这条命令执行失败才会继续执行mkdir bar的命令;如果mkdir foo这条命令执行成功,则不会创建bae目录了。
函数
函数是可以重复使用的代码片段,有利于代码的重复使用;
函数定义的语法:
第一种:`fn() {
#codes
}`
第二种: `function fn() {
#codes
}`
举例:这里输入的word就作为$1的值传给hell0()函数。
参数变量
函数体内可以使用参数变量,获取函数参数变量,与脚本参数变量是一致的。
- $1~$9:函数的第一个到第9个的参数。
- $0:函数所在的脚本名
- $#:函数的参数总数
- $@:函数的全部参数,参数之间使用空格分隔。
- $*:函数的全部参数,参数之间使用变量 $IFS值得第一个字符分隔,默认是空格,但是可以自定义
- $?:返回上一条指令是否执行成,执行成功的话输出0,输出除了0意外的数都是执行失败
下面例子中由于alice只有第一个和第二个参数,所以三四参数为空。
算术运算
算术表达式
(( … )) 语法可以进行正数的算术运算。
(( foo = 5 + 5 ))
echo $foo
10
(( … ))会自动省略空格,所以怎样写都可以。
(( … ))语法支持的算术运算符如下:
+
:加法-
:减法*
:乘法/
:除法(整除)%
:余数**
:指数++
:自增运算(前缀或后缀)--
:自减运算(前缀或后缀)
另外需要注意的是,当执行除法的时候,会出现小数的结果保留整数位。
逻辑运算
$((…))支持以下的逻辑运算符。
- <:小于
-
:大于
- <=:小于或相等
-
=:大于或相等
- ==:相等
- !=:不相等
- &&:逻辑与
- ||:逻辑或
- !:逻辑否
#如果逻辑表达式为真,则返回1,否则返回0
echo $(( 3 > 2 ))
1
echo $(( (3 > 2) || (4 <=1) ))
1