Bash Shell脚本基础-变量类型-位置变量

Bash Shell脚本基础变量类型位置变量

 

§·bash shell脚本编程概述: 1

§·bash shell脚本中的变量 2

    *什么是变量 2

    *变量的类型 2

    *bash  shell变量区别 2

            №1字符型变量: 2

        ·申明 2

        ·赋值 3

        ·运算符 3

        ·条件测试 3

        №2整数型变量: 5

        ·申明: 5

        ·赋值 5

        ·运算符 6

        ·实现算术运算: 7

        ·生成随机数 7

        ·数值条件测试 8

        -gt大于测试: 8

        -ge: 大于等于测试: 8

        -eq: 等于测试: 8

        -ne: 不等于测试: 9

        -lt: 小于测试: 9

        -le: 小于等于测试: 9

        §·位置变量$0  $1  $2  $#  $@  $* 9

◎位置变量: 9

◎举例说明: 10

§·练习题 11

 

 

 

 

 

 

§·bash shell脚本编程概述:

shell脚本编程时过程式的编程语言,由解释器把代码解释执行为机器语言(二进制)

过程式:以指令为中心,数据服务于指令

既然shell是以指令为中心,数据服务于指令,那我们的数据从何而来呢?在shell中数据一般存储于变量和数组中,我们今天就来学习下数据存储变量。

以下我们谈到的变量都为Centos 7.2中的bash shell脚本变量。

§·bash shell脚本中的变量

什么是变量

变量就是一段命名的内存空间(也就是说数据在内存中,重启或关机,该变量和数据都会丢失)

比如:申明一个变量

变量的类型

◎变量:变量类型

作用:

1、数据存储格式

2、参与的运算

3、表示的数据范围

类型:

字符

数值:整型、浮点型

在编程语言中基本上就两种变量类型:字符和数值。如果确定了某个变量的类型,就确定了该变量在内存空间的占用的内存空间。

比如:

数据存储格式和数据范围:

申明一个变量A为整数型可能占用内存空间为 1字节(8位),该变量A就确定了数值大小1-256

申明一个变量B为浮点型可能占用内存空间为2字节(16位),该变量B就确定了数值大小为1-65536

参与的运算:

变量A为整数型数据,它参与的运算中不能出现有小数点的数据;

bash  shell变量区别

无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用

Bash shell中变量类型就两类: 字符型与整数型。注意:bash shell 脚本不支持浮点型变量

1字符型变量:

·申明

默认情况下bash shell中变量无需申明,申明和赋值可以一起操作!

·赋值

直接赋值: 直接给变量一个值

变量赋值:把其它变量的值给定义的变量

命令赋值:把某个命令的结果值给定义的变量

 注意:命令格式两个都可以正常使用

·运算符

字符串也可以使用 + – * /,但是实际运用中没有自己。

使用 + :

·条件测试

◎字符串测试

==:是否等于;

>: ascii码是否大于ascii码

<: 是否小于

!=: 是否不等于

=~: 左侧字符串是否能够被右侧的PATTERN所匹配

注意: 此表达式一般用于[[ ]]中;

-z "STRING":字符串是否为空,空为真,不空为假

-n "STRING":字符串是否不空,不空为真,空为假

注意:用于字符串比较时的用到的操作数都应该使用引号

·== :相等测试

 

注:小于< 大于 > 对于字符串比较没有意义,我们就测试下面的.

 

·!= :不相等测试  (这个测试与 == 测试正好是相反的)

 

·=~: 左侧字符串是否能够被右侧的PATTERN所匹配

 

 

2整数型变量:

·申明:

declare -i var=数值

declare -i var=1  #声明与赋值一起

·赋值

直接赋值:declare -i var ; var=1

增强型赋值:

+=, -=, *=, /=, %=

+= 例如:let count+=3 自加3后自赋值(变量先前的值加上3赋给现在的变量)

例如:

·let var+=1 #自加1后自赋值

 

 

·let var++  #自加1后自赋值

 

·let var-=1 #自减1后自赋值

·let var–  #自减1后自赋值

 

 

·运算符

·bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方)

·实现算术运算:

(1) let var=算术表达式

(2) var=$[算术表达式]

(3) var=$((算术表达式)

(4) var=$(expr arg1 arg2 arg3 …)

(5) declare –i  var= 数值

(6) echo ‘算术表达式’ | bc

注意:乘法符号有些场景中需要转义,如*

·生成随机数

bash有内建的随机数生成器:$RANDOM(1-32767) echo $[$RANDOM%50] :0-49之间随机数

$RANDOM%50:$RANDOM随机数除以50得到的余数肯定再0-49之间,那我们需要产生1-50之间的余数我们如何取得呢?

解:$[$RANDOM%50+1]即可:在余数(0-49)的基础上加1即可(1-50)

·数值条件测试

◎数值测试:

-gt: 是否大于;

-ge: 是否大于等于;

-eq: 是否等于;

-ne: 是否不等于;

-lt: 是否小于;

-le: 是否小于等于;

-gt大于测试:

-ge: 大于等于测试:

-eq: 等于测试:

-ne: 不等于测试:

-lt: 小于测试:

-le: 小于等于测试:

 

§·位置变量$0  $1  $2  $#  $@  $*

◎位置变量:

在脚本代码中调用通过命令行传递给脚本的参数

$1, $2, …:对应第1、第2等参数

$0: 命令本身名称

$*: 传递给脚本的所有参数,全部参数合为一个字符串

$@: 传递给脚本的所有参数,每个参数为独立字符串

$#: 传递给脚本的参数的个数

$@ $* 只在被双引号包起来的时候才会有差异

举例说明:

#脚本的内容如下:功能观察位置变量的对应的相互关系

 

§·练习题

1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。

解:执行的结果如下,脚本的内容如下:

 

 

2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd

解:脚本内容如下:

3、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值

解:脚本内容如下

 

4、编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序

解:脚本的内容如下:

5、写一个脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户到第20用户的ID之和

解:脚本的内容如下:

 

6、写一个脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和

解:脚本内容如下:

7、写一个脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件

解:

8、写一个脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数

解答:

 

 

 

9、写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”

解答:

 

10、判断硬盘的每个分区空间和inode的利用率是否大于80,如果是,发邮件通知root磁盘满

解答:

 

11、指定文件做为参数,判断文件是否为.sh后缀,如果是,添加x权限

解答:

 

12、判断输入的IP是否为合法IP

解答:

13、计算1+2+3+…+100

解答:

 

14、输入起始值A和最后值B,计算从A+A+1…+(B-1)+B的总和

解答:

原创文章,作者:linux_root,如若转载,请注明出处:http://www.178linux.com/33454

评论列表(0条)

  • 马哥教育
    马哥教育 2016-08-12 13:34

    文章整体架构清晰,内容丰满,有理论与实践,标题可以取简介一点,整个文章排版有很用心哦,再接再励。

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code