shell整理

1. 运算符

1.1 算数运算符

用法
参数
操作符说明
+
-
*
/
%取模
=赋值
!=不等
==等于
注意

条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

demo
# expr 只能计算整数
xiaox@xiaox:~/study/shell$ echo `expr 1.1 + 1.0`
expr: 非整数参数

xiaox@xiaox:~/study/shell$ echo `expr 1 + 1`
2

# bc 能计算整数和小数
xiaox@xiaox:~/study/shell$ echo "1 + 2"|bc
3
xiaox@xiaox:~/study/shell$ echo "1.1 + 2"|bc
3.1


# 赋值不能有空格
xiaox@xiaox:~/study/shell$ a = 1
a:未找到命令
xiaox@xiaox:~/study/shell$ a=1


# 中括号内侧要有空格 
xiaox@xiaox:~/study/shell$ [1 == 2] && echo 1 || echo 0
[1:未找到命令
0
xiaox@xiaox:~/study/shell$ [ 1 == 2 ] && echo 1 || echo 0
0
# 此处注意,等号两侧要有空格,猜测将"1==2"当做了一个不为null的字符串,返回1
xiaox@xiaox:~/study/shell$ [ 1==2 ] && echo 1 || echo 0
1
# 针对上例的一个小测试,猜测是对的
xiaox@xiaox:~/study/shell$ a=1==2
xiaox@xiaox:~/study/shell$ echo $a
1==2

1.2 整数关系运算符

用法

[]中或与test一起使用

参数
操作符说明
-eqequal
-ltless than
-leless equal
-gtgreat than
-gegreat equal
demo
# 相等
xiaox@xiaox:~/study/shell/menu$ test 1 -eq 2 && echo 1 || echo 0
0
xiaox@xiaox:~/study/shell/menu$ test 1 -eq 1 && echo 1 || echo 0
1

# 小于
xiaox@xiaox:~/study/shell/menu$ test 1 -lt 0 && echo 1 || echo 0
0
xiaox@xiaox:~/study/shell/menu$ test 0 -lt 1 && echo 1 || echo 0
1

# 小于等于
xiaox@xiaox:~/study/shell/menu$ test 0 -le 1 && echo 1 || echo 0
1
xiaox@xiaox:~/study/shell/menu$ test 0 -le 0 && echo 1 || echo 0
1
xiaox@xiaox:~/study/shell/menu$ test 1 -le 0 && echo 1 || echo 0
0

# 大于
xiaox@xiaox:~/study/shell/menu$ test 1 -gt 0 && echo 1 || echo 0
1
xiaox@xiaox:~/study/shell/menu$ test 0 -gt 1 && echo 1 || echo 0
0

# 大于等于
xiaox@xiaox:~/study/shell/menu$ test 1 -ge 0 && echo 1 || echo 0
1
xiaox@xiaox:~/study/shell/menu$ test 1 -ge 1 && echo 1 || echo 0
1
xiaox@xiaox:~/study/shell/menu$ test 0 -ge 1 && echo 1 || echo 0
0

# 在[]中使用, 与test相似
xiaox@xiaox:~/study/shell/menu$ [ 0 -eq 1 ] && echo 1 || echo 0
0
xiaox@xiaox:~/study/shell/menu$ [ 0 -eq 0 ] && echo 1 || echo 0
1

1.3 字符串

参数
操作符说明
=相等返回True
!=不等返回True
-z长度为0返回True
-n长度不为0返回True
str字符串不为空返回True
demo
# =
xiaox@xiaox:~$ [ "a" = "a" ] && echo 1 || echo 0
1
xiaox@xiaox:~$ [ "a" = "b" ] && echo 1 || echo 0
0
# !=
xiaox@xiaox:~$ [ "a" != "a" ] && echo 1 || echo 0
0
xiaox@xiaox:~$ [ "a" != "b" ] && echo 1 || echo 0
1
# -z
xiaox@xiaox:~$ [ -z "" ] && echo 1 || echo 0
1
xiaox@xiaox:~$ [ -z "a" ] && echo 1 || echo 0
0
# -n
xiaox@xiaox:~$ [ -n "" ] && echo 1 || echo 0
0
xiaox@xiaox:~$ [ -n "a" ] && echo 1 || echo 0
1
# str
xiaox@xiaox:~$ unset a
xiaox@xiaox:~$ echo $a

xiaox@xiaox:~$ [ "$a" ] && echo 1 || echo 0
0
xiaox@xiaox:~$ a="a"
xiaox@xiaox:~$ [ "$a" ] && echo 1 || echo 0
1
xiaox@xiaox:~$ 

1.4 文件

说明
操作符说明
-d file是目录返回True
-f file是普通文件(不是目录或者设备文件)返回True
-r file可读返回True
-w file可写返回True
-x file可执行返回True
-s file文件不为空(文件大小大于0)返回True
-e file文件(目录)存在返回True
demo
# -d
xiaox@xiaox:~/study$ test -d shell && echo 1 || echo 0
1
xiaox@xiaox:~/study$ touch myfile
xiaox@xiaox:~/study$ test -d myfile && echo 1 || echo 0
0
# -f
xiaox@xiaox:~/study$ test -f myfile && echo 1 || echo 0
1
xiaox@xiaox:~/study$ test -f shell && echo 1 || echo 0
0
# -r
xiaox@xiaox:~/study$ ll
总用量 12
drwxrwxr-x  3 xiaox xiaox 4096 1029 14:01 ./
drwxr-xr-x 21 xiaox xiaox 4096 1029 12:05 ../
-rw-rw-r--  1 xiaox xiaox    0 1029 14:01 myfile
drwxrwxr-x  3 xiaox xiaox 4096 1029 12:05 shell/
xiaox@xiaox:~/study$ test -r shell && echo 1 || echo 0
1
xiaox@xiaox:~/study$ chmod -r myfile 
xiaox@xiaox:~/study$ ll
总用量 12
drwxrwxr-x  3 xiaox xiaox 4096 1029 14:01 ./
drwxr-xr-x 21 xiaox xiaox 4096 1029 12:05 ../
--w--w----  1 xiaox xiaox    0 1029 14:01 myfile
drwxrwxr-x  3 xiaox xiaox 4096 1029 12:05 shell/
xiaox@xiaox:~/study$ test -r myfile && echo 1 || echo 0
0
# -w
# -x
# -s
xiaox@xiaox:~/study$ clear
xiaox@xiaox:~/study$ ll
总用量 12
drwxrwxr-x  3 xiaox xiaox 4096 1029 14:01 ./
drwxr-xr-x 21 xiaox xiaox 4096 1029 12:05 ../
--w--w----  1 xiaox xiaox    0 1029 14:01 myfile
drwxrwxr-x  3 xiaox xiaox 4096 1029 12:05 shell/
xiaox@xiaox:~/study$ test -s myfile && echo 1 || echo 0
0
xiaox@xiaox:~/study$ echo "text" >> myfile 
xiaox@xiaox:~/study$ ll
总用量 16
drwxrwxr-x  3 xiaox xiaox 4096 1029 14:01 ./
drwxr-xr-x 21 xiaox xiaox 4096 1029 12:05 ../
-rw-rw-r--  1 xiaox xiaox    5 1029 14:08 myfile
drwxrwxr-x  3 xiaox xiaox 4096 1029 12:05 shell/
xiaox@xiaox:~/study$ test -s myfile && echo 1 || echo 0
1
# -e
xiaox@xiaox:~/study$ test -e myfile && echo 1 || echo 0
1

1.5 布尔运算符

说明

在test或[]中使用

操作符说明
!
-o
-a
demo
# !
xiaox@xiaox:~/study$ [ ! 1 -eq 1 ] && echo 1 || echo 0
0
xiaox@xiaox:~/study$ [ 1 -eq 1 ] && echo 1 || echo 0
1
# -o
xiaox@xiaox:~/study$ [ 1 -eq 1 -o 1 -eq 0 ] && echo 1 || echo 0
1
# -a
xiaox@xiaox:~/study$ [ 1 -eq 1 -a 1 -eq 0 ] && echo 1 || echo 0
0

1.6 逻辑运算

说明

[[]]中使用

操作符说明
&&逻辑与
`
demo
# ||
xiaox@xiaox:~/study$ [[ 1 -eq 1 || 1 -eq 0 ]] && echo 1 || echo 0
1
# &&
xiaox@xiaox:~/study$ [[ 1 -eq 1 && 1 -eq 0 ]] && echo 1 || echo 0
0

2. 流程控制

2.1 分支

2.1.1 单分支
# 第一种写法
if [ 条件 ] 
 then

fi

# 第二种写法
if [ 条件 ]; then

fi
2.1.2 双分支
if 条件1
 then 
  指令1
elif 条件2
 then
  指令2
else 
 指令3
fi

3. 函数

3.1 定义

[ function ] funname [()]

{

    action;

    [return int;]

}
说明

1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

3.2 调用

# 只用函数名,不用括号,定义函数必须在调用函数的前面
funname

3.3 函数传参

传参方式和脚本一致,只是参数名换成脚本名

# 使用
funname 1 2 3

# 函数内部
使用$1,$2...
唯一注意的是$0取的是脚本名

4. 特殊字符

参数处理说明
$#传递到脚本参数的个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示shell使用的当前选项,与set命令功能相同
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
demo

参考:
Linux命令大全

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值