【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 测试文件是否存在