什么是shell?
shell是一个命令 解释器,作用是解释执行用户输入的命令和程序(即shell命令解释器用来执行shell脚本)
shell是由c语言编写的程序
shell存在与操作系统的最外层,负责和用户直接对话,把用户的操作解释给系统,并且处理各种操作系统的输出结果,然后输出结果到屏幕给用户。
外围应用程序->命令解释器(shell)->系统内核->硬件
什么是shell脚本?
shell脚本:当命令不在命令行模式下执行,而是通过一个程序文件来执行(对比windows系统下的*.bat批处理程序)
由用户在shell脚本输入一系列的命令和命令语句。(命令语句即变量,流程控制语句,注释组成)
shell脚本可以处理操作系统底层的业务,基于linux几千个对于常见系统脚本,使用shell更简单,快捷,如:软件一键自动化安装,部署,优化,软件启动脚本,备份等
Linux命令和shell脚本区别:
1.linux命令是在linux命令行模式下执行
- shell脚本通常是一个文件,文件包括各种命令和命令语句
shell脚本规范以及注释
(1) 脚本第一行指定脚本解释器
#!/bin/bash 或者
#!/bin/sh
(2) 脚本开头加上作者,日期,版本信息
#Date: 2017-01-01
#Author: Created by hhy
#Email: 1425301899@qq.com
#Description: The script function is to.....
#Version: 1.0
(3) 脚本中一定不要使用中文,防止乱码
(4) 脚本文件应该以".sh"结尾
(5) 代码缩进(tab键)
(6)“#” 后面的内容表示注解(除了开头第一行),不会当作程序运行,系统解释器看不到这部分内容,既可以自成一行也可以跟在脚本命令后面在同一行。
第一个Hello World 脚本
#!/bin/bash
#Date: 2017-01-01
#Author: Created by hhy
#Email: 1425301899@qq.com
#Description: The script function is to.....
#Version: 1.0
echo " Hello World"
shell 脚本运行/执行
shell脚本的执行是从上到下,从左到右依次执行
shell脚本执行方式:
(1) /bin/bash script-name 当脚本文件本身没有可执行权限时可以使用该方法
[root@localhost sciptshell]# /bin/bash script-name
(2)./script-name 需要先将脚本文件的权限改为可执行
[root@localhost sciptshell]#./script-name
两者执行区别:
通过此方法执行,shell脚本开头如果不加 #!/bin/bash 也是可以执行的,但是通过./script-name ,shell脚本开头如果不加 #!/bin/bash 此脚本是不能被执行的
shell 变量
shell变量特点: bash shell不区分变量类型,如 :常见的变量类型为整型,字符串,小数等,要和强类型语言作区别(Java /c/c++)
shell变量分类:
1.环境变量 (全局变量)
指用export 内置变量导出的变量,用于定义shell运行环境,都是大写形式,永久生效
shell脚本运行时会查找系统环境变量PATH :指定环境文件,顺序加载之后,就开始执行shell脚本的内容
eg: 搭建jdk环境时,在/etc/profile配置的信息
打印path信息
[root@localhost sciptshell]#echo ${PATH}
2. 普通变量(局部变量)
在当前shell运行期间的脚本中使用,退出shell,变量生效
运行期间指的是:./script -name 回车到脚本执行结束这个过程就是脚本运行期间
定义:
变量名=value
变量名=” value"
eg: age=20
arr="hello world"
引用变量:{age}
将命令的结果作为变量的内容赋值:time=${date}
1.内容是纯数字,简单的连续字符(内容中不带有任何空格),定义时可以不用加引号
- 没有特殊情况时,字符串一律用双引号定义赋值,特别是多个字符串中间有空格
- 希望变量值引用命令并获取命令的结果时就用${}
脚本举例如下:
#!/bin/bash
#Date: 2017-01-01
#Author: Created by hhy
#Email: 1425301899@qq.com
#Description: The script function is to.....
#Version: 1.0
#定义一个整型变量
first=20
# 将命令的结果赋值给一个变量
time=${date}
#输出这个变量
echo ${first}
#获取date命令的结果(这里的date不是一个变量,而是linux 可执行命令,用来查看系统时间
echo ${date}
#打印引用变量 ${time}结果
echo ${time}
3. 特殊变量
(1) $0
获取当前执行的shell脚本的文件名,如果执行脚本包含了路径,那么就包含路径名
例如:
#!/bin/bash
#Date: 2017-01-01
#Author: Created by hhy
#Email: 1425301899@qq.com
#Description: The script function is to.....
#Version: 1.0
echo $0
[root@localhost sciptshell]#./firstShellScript.sh
./firstShellScript.sh
[root@localhost sciptshell]#/bin/bash firstShellScript.sh
firstShellScript.sh
(2)$n
获取当前执行的shell脚本的第n个参数值,n=1......9 ,当n为0时表示脚本的文件名,如果n大于9,则用大括号括起来,例如 ${10}
举例说明:
#!/bin/bash
#Date: 2017-01-01
#Author: Created by hhy
#Email: 1425301899@qq.com
#Description: The script function is to.....
#Version: 1.0
echo $0
echo $1
echo $2
执行结果如下:firstShellScript.sh脚本执行打印出了文件名,以及文件名后面根的执行参数
2指的是第二个参数
[root@localhost sciptshell]#./firstShellScript.sh start stop
./firstShellScript.sh
start
stop
(3)$#
获取当前执行的shell脚本后面接的参数的总个数
举例说明:
#!/bin/bash
#Date: 2017-01-01
#Author: Created by hhy
#Email: 1425301899@qq.com
#Description: The script function is to.....
#Version: 1.0
echo $0
echo $1
echo $2
echo $#
上面脚本 echo $#执行的结果就是 2
[root@localhost sciptshell]#./firstShellScript.sh start stop
./firstShellScript.sh
start
stop
2
(4)$?
获取执行上一个指令的执行状态返回值(0为成功,非0为失败)
用来判断上一个命令是否执行成功
举例说明:
#!/bin/bash
#Date: 2017-01-01
#Author: Created by hhy
#Email: 1425301899@qq.com
#Description: The script function is to.....
#Version: 1.0
echo $0
echo $1
echo $2
echo $#
echo $?
上面脚本 echo $?执行的结果就是 0
[root@localhost sciptshell]#./firstShellScript.sh start stop
./firstShellScript.sh
start
stop
2
0
变量数值运算
算数运算命令
((运算表达式)): 用于整数运算的常用运算符,效率很高
表达式需要加2对小括号
算数运算符 | 意义 |
---|---|
+、- | 加法(或正号)、减法或者负号() |
+、/ | 乘法、除法 |
++、-- | 自增加或者自减少 |
!、&&、|| | 逻辑非(取反)、逻辑与(and)、逻辑或(or) |
<、<=、>、>= | 比较符号 |
==、!= | 比较符号(相等、不相等) |
举例说明:
#!/bin/bash
#Date: 2017-01-01
#Author: Created by hhy
#Email: 1425301899@qq.com
#Description: The script function is to.....
#Version: 1.0
#加法运算,需要用2对小括号且括号外需要使用$符号
echo $((1+2))
#除法取整
echo $((3/2))
#自增
i=10
echo $((i++))
echo ${i}
echo $((++i))
[root@localhost sciptshell]#./firstShellScript.sh
3
1
10
11
12
注意:
- {i}=11
-
任意非0整数(不管你是负的还是正的)取反,得到的结果都是1
逻辑取反操作,0代表假,1代表真
所以, echo ((!1))->打印结果为 0
echo $((!-1))->打印结果也为 0 -
双与&&: 两个都为真,结果才为真
echo $((!0 && 0))-->得到的结果是 0
4.短路或 ||:其中一个为真,结果就为真
echo $((!0 || 0))-->得到的结果是 1
5.比较运算符:也是逻辑运算,结果也只有0或1
echo ((5==3))----》打印结果为 0
echo $((5!=3))----->打印结果为 1
6.算数运算符不能使用小数
比如 echo $((5.1!=3))---->执行脚本会报错
如果使用小数,需要使用linux bc命令(自行百度)
网友评论