【4】shell脚本编译、变量,语句

【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/bashY=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匹配项中可以存在多个模式,每种模式之间用|隔开



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值