【1】shell脚本编程
shell--》解析器:sh ksh csh bash
shell脚本:本质--》shell命令的有序集合
shell脚本编程:将shell命令按照一定的逻辑顺序实现指定功能,
放到一个文件中文件叫脚本文件,后缀.sh,可以直接执行,
不用编译。
shell脚本语言--》解释型语言
写一个shell脚本文件步骤:
1.创建一个脚本文件
touch xxx.sh
2.将脚本文件权限修改为可执行
chmod 777 xxx.sh
3.编辑脚本内容
vi xxx.sh
4.执行脚本文件
./xxx.sh 或者 bash xxx.sh
练习:
1)在当前路径下创建file_1到file_5,5个普通文件
2)删除 file_2和file_3文件,(使用通配符)
3)将剩下的file文件用tar压缩成bz2的格式
4)将压缩文件复制到家目录下
5)进入到家目录解压压缩文件
6)删除压缩包
【2】shell变量
1.shell中允许建立变量存储数据,但是不支持数据类型,
(如:整型、字符、浮点类型),所有赋值给变量的值都解释为一串字符。
2.变量的定义格式:
变量名=值
注:等号两边都不能有空格。
取shell变量的值:$变量名
3.shell变量的分类
1)环境变量 printenv 或 env
locale查询本地环境变量
HOME=/home/hq
PWD=当前路径
PATH保存的是可执行命令的默认查找路径
2)用户自定义变量
在shell编程中通常定义的变量名用大写,变量的调用:
变
量
名
L
i
n
u
x
S
h
e
l
l
/
b
a
s
h
从
右
向
左
赋
值
如
:
Y
=
y
y
X
=
变量名 Linux Shell/bash从右向左赋值 如:Y=yy X=
变量名LinuxShell/bash从右向左赋值如:Y=yyX=Y
echo $X //输出yy
使用unset命令删除变量的赋值
如:X=xx
unset X
echo $X //没有任何输出
3)位置变量或命令行参数
$0 执行的脚本名
$1-
9
、
9、
9、{10}-${n} 命令行空格传的参数
$# 命令行参数个数,除$0
$@ $* 遍历输出命令行参数内容
4)预定义变量
$? 获取的是上一句命令是否正确执行的结果
0:真 非0:为假
$$ 获取进程pid
【3】shell中的语句
1)说明性语句
以#号开始到该行结束,不被解释执行
#!/bin/bash 告诉操作系统使用哪种类型的shell执行此脚本文件
2)功能性语句
任意的shell命令、用户程序或其它shell程序。
1.read (类似c中scanf)
从终端获取值赋值给变量。
格式:read 变量名1 变量名2 …
加提示语句:read -p “提示字符串” 变量名1 变量名2 …
注:把终端读入空格隔开的第一个单词赋值给第一个变量,第二个
单词赋值给第二个变量,依次类推赋值,剩余所有单词赋值
给最后一个变量。
2.expr
算术运算命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(*)、整除(/)和求模(%)等操作
如:expr ( 12 + 3 ) * 2
NUM=expr 12 + 3
:将运算的结果赋值给变量
注意:
1)运算符左右两侧必须有空格
2)*和()必须加转义字符,* 、 ( )
3)expr语句可以直接输出运算结果
3.let
在运算中不能有空格
运算结果需要赋给一个变量
变量参与运算的过程不用加$取值
如:
Let r=(1+3)*2
Let r+=1 // ((r++))
3.$ [ ]
4.(())
练习:计算表达式值a*b+c-d/b;
要求:
1)从终端读入4个数a,b,c,d;a=2,b=3,c=15,d=18
2)进行运算
3)打印结果输出到终端
5.test
test语句可测试三种对象:
字符串 整数 文件属性
每种测试对象都有若干测试操作符
1)字符串的测试:
s1 = s2 测试两个字符串的内容是否完全一样
s1 != s2 测试两个字符串的内容是否有差异
-z s1 测试s1 字符串的长度是否为0
-n s1 测试s1 字符串的长度是否不为0
2)整数的测试:
a -eq b 测试a 与b 是否相等
a -ne b 测试a 与b 是否不相等
a -gt b 测试a 是否大于b
a -ge b 测试a 是否大于等于b
a -lt b 测试a 是否小于b
a -le b 测试a 是否小于等于b
3)文件属性的测试;
-d name 测试name 是否为一个目录
-f name 测试name 是否为普通文件
-e name 测试文件是否存在
3)结构性语句
条件测试语句、多路分支语句、循环语句、循环控制语句等
1》if …then …fi
1.if…then…fi
1)基本结构:
if 表达式(判断)
then
命令表
fi
2)分层结构:
if 表达式
then
命令表1
else
命令表2
fi
3)嵌套结构:
if 表达式
then
命令表1
else
if 表达式
then
命令表
fi
fi
4)elif
if 表达式1
then
命令表1
elif 表达式2
then
命令表2
elif 表达式3
then
命令表3
...
else
命令表n
fi
注意:
如果表达式为真, 则执行命令表中的命令; 否则退出if语句,
即执行fi后面的语句。
if和fi是条件语句的语句括号, 必须成对使用;
命令表中的命令可以是一条, 也可以是若干条。
练习1:利用if语句实现找出三个数中最大的数
2》 case语句
case 字符串变量 in
模式1)
命令表1
;;
模式2)
命令表2
;;
……
模式n)
命令表n
;;
esac
注意:
1)case语句只能检测字符串变量
2)命令表以单独的双分号行结束,退出case语句
3)模式 n常写为字符* 表示所有其它模式
4)case匹配项中可以存在多个模式,每种模式之间用|隔开