shell系统变量、四则运算与条件判断

系统变量

$?
上一条命令执行后的返回状态。如果正常执行返回为0,否则为1.
$0
当前执行的程序或脚本名称
$#
脚本后面跟的参数的个数
$*
输出脚本后面接的所有的参数,这些参数当成一个整体输出,每个变量参数之间以空格隔开;
$@
输出脚本后面接的所有参数,但这些参数都是独立存在的。
$1~$9
脚本后面的位置参数,如 1 表 示 第 一 个 位 置 的 参 数 ‘ 1表示第一个位置的参数 ` 1 ‘ 当 前 所 在 进 程 的 进 程 号 ; ‘ ` 当前所在进程的进程号; ` !后台运行的最后一个进程;!$`
调用最后一条命令中的参数

#!/bin/env bash
#xxx
echo "\$? = $?"
echo "\$0 = $0"
echo "\$# = $#"
echo "\$* = $*"
echo "\$@ = $@"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$$ = $$"
echo "\$! = $!"
echo "\!$ = !$"

\是转义符

> chmod +x test.sh
> ./test2.sh a b 3
> //结果:
$? = 0
$0 = ./test.sh
$# = 3
$* = a b 3
$@ = a b 3
$1 = a
$2 = b
$3 = 3
$$ = 15561
$! =
\!$ = !$

四则运算

四则运算的表达式:
$(())
$[]
expr
let

注意在做乘除的时候需要空格,否则会整个输出,如expr 2/2输出为2/2。做乘法时不能直接使用*,因为*有特殊含义,需要使用转义符\搭配使用。

echo $((1+1))	#2
echo $[2*3]		#6
expr 2 / 2		#1
expr 4 \* 2 	#8
n=1;let n+=2;echo $n 	#3

在做小数计算的时候,无法使用上述的方法。我们需要使用bc工具。
参考下面的链接
小数运算

条件判断

1、判断格式:
test 条件表达式
[ 条件表达式 ]
[[ 条件表达式 ]] 支持正则
使用中括号时,两边需要留有空格。
2、相关参数:
判断整数之间的关系

参数含义
-eq判断是否相等
-ne不等
-gt大于
-lt小于
-ge大于等于
-le小于等于

e就是equal。

#!/bin/env bash
echo "$0"
test 1 -eq 1;echo $?
test 1 -ne 1;echo $?
[ 2 -gt 1 ];echo $?
[ 2 -lt 4 ];echo $?
[ 4 -ge 2 ];echo $?
[ 4 -le 2 ];echo $?

结果:

[root@hadoop01 shell]# ./test3.sh
./test3.sh
0
1
0
0
0
1

判断文件类型

参数含义
-e判断任意类型文件是否存在
-f判断是否存在并且是一个文件(非目录)
-d判断是否存在并且是一个目录
-c判断是否存在并且是一个字符文件
-s判断是否存在并且是一个非空文件
-L判断文件是否存在并且是一个软连接文件
-b判断文件是否存在并且是一个块设备文件
-S判断文件是否存在并且是一个套接字文件
-p判断文件是否存在并且是一个命名管道文件

附:软连接创建方式:

ln -s file1 file2

例如,判断一个日志文件:derby.log

test -e derby.log

判断完成后,shell界面并不会返回结果,此时需要我们使用$?来查看结果。

echo $?

如果返回为0则为真,即目标文件存在,如果为1,则为假,即不存在。
又例如判断目标是否为一个目录。此时返回值为1,即不是目录文件。

 [ -d ./derby.log ];echo $?

判断文件权限

参数含义
-r当前用户对其是否可读
-w当前用户对其是否可写
-x当前用户对其是否可执行
-u是否有suid,高级权限冒险位
-g是否sgid,高级权限强制位
-k是否有t位,高级权限粘滞位
>test -r derby.log;echo $?
> test -w derby.log;echo $?
> ...

判断文件的修改时间

参数含义
-nt比较较新的文件
-ot比较较旧的文件
-ef比较是否为同一个文件,也可用于判断硬链接,是否指向同一个inode

判断derby.log文件是否比employee.txt更新

>test derby.log -nt employee.txt ;echo $?

字符串比较

参数含义
-z判断是否为空字符串
-n判断是否为非空
str1 = str2判断字符串是否相等
str1 != str2判断两字符串不等
test -z "hello";echo $?		#1
test -n "hello";echo $?		#0
test "hello" = "world";echo $?		#1

A="hello"
B="world"
test "$A" = "$B";echo $?		#1

多重条件判断

参数含义
&&和-a逻辑与
||和-o逻辑或
//-a的用法
test 2 -eq 2 -a 2 -lt 4;echo $?
//&&用法
[ 2 -eq 2 ]&&[ 2 -lt 4 ];echo $?

&& 前面的表达式为真,才会执行后面的代码

|| 前面的表达式为假,才会执行后面的代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值