目录
什么是shell
Shell是命令解释器的一种,就拿我们人和计算机打交道来说。计算机识别
的是二进制的机器语言,而我们只能看得懂一些普通的语言。
Shell的作用是什么呢?
就是当我们在对计算机下一条指令或者执行程序的时候,它负责解释执行我们
输入的命令及程序。我们每下发一条指令或者执行一个程序,shell就执行一
次。关系如下图所示:
当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序文件就被称为Shell脚本。
Shell脚本的类型
Shell脚本语言是弱类型语言(无须定义变量的类型即可使用),在Unix/Linux中主要有两大类shell:
- Bourne shell
Bourne shell包括以下3种类型:
Bourne shell (sh)
Korn shell(ksh)
Bourne Again Shell
- C shell
C shell包括以下2种类型:
csh
tchs
查看系统默认的shell
查看系统支持的Shell
Shell脚本的执行
- bash script-name 或者sh script-name(这个主要是针对脚本文件没有执行权限的情况)
- path/script-name或者./script-name(在当前路径下执行脚本,需要将脚本的权限改为可执行权限。然后用脚本的绝对路径或者相对路径执行脚本)
- source script-name或者. script-name(这种方法通常是使用点号或者source加载或者读入对应的shell脚本文件,然后依次执行相应的shell脚本中的语句。这些语句将在当前父shell脚本中执行,其他执行脚本的方式都是重新创建进程去执行脚本)
Shell脚本的书写规范
- 1个规范的Shell脚本会在第一行指出由哪个解释器来执行脚本中的内容,一般为:#!/bin/bash或者#!/bin/sh
- 在shell脚本中#后面所跟的内容表示注释内容,注释最好不要用中文,脚本中最好也不要出现中文
- Shell脚本的开头会加版本、版权等信息
- Shell脚本的命名后缀以.sh作为扩展名
- 对于常规变量的字符串定义变量值应加双引号,等号前后不能有空格。需要强引用的,则用单引号(‘’),如果是命令的引用,则用反引号(``)
a=10 #gei a fuzhi
echo a # output a
echo $a # output the value of a
echo "$a" # output the value of a
echo '$a'
echo `date` # output now time
- 脚本中的单引号、双引号、反引号都需要在英文状态下面使用
Shell中的变量
变量是什么?
变量是暂时存储数据的地方和数据标记,所存储的数据存在于内存空间中,通
过正确地调用内存中变量的名字就可以读取出与变量对应的数据。
如何给变量赋值?
变量名称=值
等号两边没有空格!
等号两边没有空格!
等号两边没有空格!
重要的事情说三遍!!!
交互式赋值法
read -p "提示信息“ 变量名
如何输出变量的值?
echo $变量名
echo {$变量名}
赋值时引号的作用
- 双引号
允许通过$去引用其他值 - 单引号
禁止通过$去引用其他变量,将 $视为普通字符 - 反引号
命令替换,提取命令执行后输出的结果
变量的算数运算
运算操作符及其命令 | 意义 |
---|---|
(()) | 用于整数运算的常见运算符,效率很高 |
let | 用于整数运算,类似于(()) |
expr | 用于整数运算,但还有许多其他功能 |
bc | linux下的一个计算器程序 |
$[] | 用于整数运算| |
(()) 数值运算命令的用法
双小括号 (()) 的作用是进行数值运算与数值比较,它的效率很高,用法灵活,是Linux下常用的运算操作符。
运算操作符及其命令 | 意义 |
---|---|
((i=i+1)) | 将i+1的值赋给i |
i=$ ($A+5) | 将$A+5的值赋值给i |
((8>5 && 6 == 6)) | 进行比较操作 |
echo $((2+1)) | 将2+1的值输出 |
let 运算命令的用法
语法:
let 赋值表达式
expr命令的使用
- expr用于运算
语法:expr 计算表达式
-
expr配合变量计算
-
利用expr计算字符串长度
A="abcd"
expr length "$A"
Shell的条件测试
文件测试操作符
常用文件测试操作符 | 说明 |
---|---|
-d ,d的全拼为directory | 当文件存在且为目录则为真 |
-f,f的全拼为file | 文件存在且为文件则为真 |
-e,e的全拼为exits | 文件存在则为真 |
-s,s的全拼为size | 文件存在且文件的大小不为0则为真 |
-r,r的全拼为read | 文件存在且可读则为真 |
-w,w的全拼为write | 文件存在且可写则为真 |
-x,x的全拼为executable | 文件存在且可执行则为真 |
-L,L的全称为link | 文件存在且为链接文件则为真 |
f1 -nt f2,nt的全称为newer than | 文件f1比文件f2新则为真 |
f1 -ot f2,ot的全称为older than | 文件f1比文件f2旧则为真 |
字符串测试操作符
常用字符串操作测试符 | 说明 |
---|---|
-n | 若字符串长度不为0,则为真 |
-z | 若字符串长度为0,则为真| |
“字符串1” == “字符串2” | 若字符串1等于字符串2,则为真 |
”字符串1“ != “字符串2” | 若字符串1不等于字符串2,则为真 |
整数二元比较操作符
在test以及[ ]中使用的比较符号 | 在(())和[[]]中使用的比较符号 | 说明 |
---|---|---|
-eq | ==或者= | 相等,全称为equal |
-ne | != | 相等,全称为not equal |
-gt | > | 大于,全称为greater than |
-ge | >= | 大于等于,全称为greater equal |
-lt | < | 小于,全称为less than |
-le | <= | 小于等于,全称为less equal |
逻辑操作符
在[]和test中使用的操作符 | 在[[]]和(())使用的操作符 | 说明 |
---|---|---|
-a | && | and,与操作,两端都为真结果才为真 |
-o | || | or,或操作,两端又一个为真则结果为真 |
! | ! | not,非,两端结果相反才为真 |
Shell选择判断循环语句
if条件判断语句
- 形式1
if 条件判断
then
命令
else
命令
fi
- 形式2
if 条件判断;then
命令
else
命令
fi
##双条件判断
if 条件判断
then
命令
elif 条件判断
then
命令
else
命令
fi
##或
if 条件判断;then
命令
elif 条件判断;then
命令
else
命令
fi
if关于字符串的匹配
case条件判断语句
case 变量 in
one)
命令
;;
two)
命令
;;
*)
命令
esac
for循环
for 条件
do
命令
done
##或
for 条件;do
命令
done
while循环
while 条件
do
命令
done