【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
【2】shell变量
1. shell中允许建立变量存储数据,但是不支持数据类型, (如:整型、字符、浮点类型), 所有赋值给变量的值都解释为一串字符。
2. 变量的定义格式:变量名=值
注:等号两边都不能有空格。
取shell变量的值:$变量名
3. shell变量的分类
1)环境变量 printenv 或 env
HOME=/home/hq
2)用户自定义变量
在shell编程中通常定义的变量名用大写,变量的调用:$变量名
Linux Shell/bash从右向左赋值
如:Y=yy
X=$Y
echo $X //输出yy
使用unset命令删除变量的赋值
如:X=xx
unset X
echo $X //没有任何输出
3)位置变量或命令行参数
$0 执行的脚本名
$1-$9、${10}-${n} 命令行空格传的参数
$# 命令行参数个数,除$0
$@ $* 遍历输出命令行参数内容
4)预定义变量
$? 获取的是上一句命令是否正确执行的结果
0: 真 非0:为假
$$ 获取进程pid
【3】shell中的语句
1)说明性语句
以#号开始到该行结束,不被解释执行(注释)
#!/bin/bash
告诉操作系统使用哪种类型的shell执行此脚本文件
2)功能性语句
任意的shell命令、用户程序或其它shell程序。
3)结构性语句
条件测试语句、多路分支语句、循环语句、循环控制语句等
【4】功能性语句
1. read
从终端获取值赋值给变量。
格式: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++))
练习:计算表达式值a*b+c-d/b;
要求:
1)从终端读入4个数a,b,c,d;a=2,b=3,c=15,d=18
2)进行运算
3)打印结果输出到终端 (15)
4. test
test语句可测试三种对象:
字符串 整数 文件属性
每种测试对象都有若干测试操作符
1)字符串的测试:(等号两边加空格)
s1 = s2 测试两个字符串的内容是否完全一样
真,假
echo $?
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 测试文件是否存在