linux Shell知识总结(二)

一:shell条件测试

在Shell程序中,用户可以使用测试语句来测试指定的条件表达式的条件的真或者假。当指定的条件为真时,整个条件测试的返回值为0;反之,如果指定的条件为假,则条件测试语句的返回值为非0值。

1.1:test条件测试

test命令和表达式中间至少有一个空格

使用echo $?#命令返回结果进行判断,结果为0成立,反之不成立。

1.2:整数测表达式
[]/test比较符号( ( ) )   /    [ [ ] ]比较符号
-eq==/=
-ge>=
-gt>
-le<=
-lt<
-ne!=

在使用整数比较时,需要注意数字必须是整数,否则会出现报错。

测试表达式符号[ ]test[ [ ] ]( ( ) )
边界是否需要空格需要需要需要不需要
逻辑操作符-a/-o/!-a/-o/!&&/||/!&&/||/!
整数比较符-eq/-ge/-gt/-le/-lt/-ne-eq/-ge/-gt/-le/-lt/-ne-eq/-ge/-gt/-le/-lt/-ne或=/>=/>/<=/</!==/>=/>/<=/</!=
字符串比较符=/==/!==/==/!==/==/!==/==/!=
是否支持通配符不支持不支持支持不支持

注意:[]使用><时使用命令\进行转义且[ ] 两边都必须有空格

[[]] 两边都必须有空格 且><不需要转义。

1.3:文件测试运算符

-b file检测文件是否是块设备文件,如果是,则返回 true。[ -b $file ] 返回 false。
-c file检测文件是否是字符设备文件,如果是,则返回 true。[ -c $file ] 返回 false。
-d file检测文件是否是目录,如果是,则返回 true。[ -d $file ] 返回 false。
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。[ -f $file ] 返回 true。
-S是否为socket文件
-p是否为管道符文件
-L是否为链接文件
-u是否有suid的权限
-g file检测文件是否设置了 SGID 位,如果是,则返回 true。[ -g $file ] 返回 false。
-k file检测文件是否设置了冒险位(Sticky Bit),如果是,则返回 true。[ -k $file ] 返回 false。
-s file检测文件是否为空(文件大小是否大于0),不为空返回 true。[ -s $file ] 返回 true。
-e file检测文件(包括目录)是否存在,如果是,则返回 true。[ -e $file ] 返回 true。
-r file检测文件是否可读,如果是,则返回 true。[ -r $file ] 返回 true。
-w file检测文件是否可写,如果是,则返回 true。[ -w $file ] 返回 true。
-x file检测文件是否可执行,如果是,则返回 true。[ -x $file ] 返回 true。

示例:使用test -d测试文件是否为目录。

1.4:字符串运算符

二:流程控制之条件判断

2.1:if条件语句的语法

if条件语句根据不同的条件来执行不同的程序分支。

2.1.1:单分支语法

2.1.2:多分支语法

示例:输入成绩,当成绩范围在100-85为A,84-75为B,74-60为C,60以下为D。

2.2:多条件判断语句case

case可针对谋变量不同的值结果进行情景分析

语法:

示例:输入成绩,当成绩范围在100-85为A,84-75为B,74-60为C,60以下为D。

三:流程控制之循环

for循环通常用于遍历整个对象或者数字列表。按照循环条件的不同,for循环语句可以分为带列表的for循环、不带列表的for循环以及类C风格的for循环。

3.1:for循环

3.1.1:for列表循环有次数循环

示例:测试主机是否运行,ping以125...130结尾的网段

3.1.2:for不带列表的循环

示例:测试主机是否运行,ping以125...130结尾的网段

执行脚本时传入列表 192.168.182.{125..130}

3.1.3:C风格的语法格式

示例:打印三角型

示例:打印九九乘法表

3.2:while循环

while循环是另外一种常见的循环结构。使用while循环结构,可以使得用户重复执行一系列的操作,直到某个条件的发生。

示例:猜猜看——在10以内猜一个数。必须输入的是数字!

示例:输入两个数字,比较大小。必须输入的是数字!

四:函数和数组

4.1:什么是函数

Shell中的函数的概念与其他的语言的函数的概念并没有太大的区别。从本质上讲,函数是一个函数名到某个代码块的映射。也就是说,用户在定义了函数之后,就可以通过函数名来调用其所对应的一组代码。

4.2:函数语法

示例:测试主机是否运行,ping以125...130结尾的网段

4.3:数组

4.3.1:定义数组

数组:有序列的元素列表,将有限个相同类型的变量集合命名,数组中各个变量称为元素或分量或下标变量;用来区分各个元素的数字标号称为下标。----数组用户存放多个相同类型数据的集合

方法一:用小括号将变量值括起来赋值给数组变量,每个变量之间要用空格进行分隔。

num1=(1 2 3 4)

方法二:用小括号将变量值括起来,同时采用键值对的形式赋值。

num2=([0]=1 [1]=2 [2]=3 [3]=4)

方法三:通过分别定义数组变量方法。

 num3[0]=1;num3[1]=2;num3[2]=3;mum3[3]=4

方法四:动态的定义变量,并使用命令的输出结果作为数组的内容。

num4=(`seq 5`)
num4=(`ls *.sh`)

4.3.2:定义关联数组: 申明关联数组

普通数组的下标只能是整数,而关联数组的下标是字符串。当然也可以使用数字作为下标 关联数组虽然大部分操作类似普通数组,但是其实它不是数组,而是字典,里面存储着键值对,且键的顺序不是按自然顺序排列的。

declare -A 数组名#声明关联数组

@和* 的区别

*会把所有参数识别为一个整体

@会把所有的参数识别为一个整体 当有引号存在时会把引号里面的参数识别成一个参数

居于两个参数,循环打印

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值