shell整理

来源:互联网 发布:淘宝商城托管 编辑:程序博客网 时间:2024/05/16 11:53

    • 运算符
      • 1 算数运算符
        • 用法
        • 参数
        • 注意
        • demo
      • 2 整数关系运算符
        • 用法
        • 参数
        • demo
      • 3 字符串
        • 参数
        • demo
      • 4 文件
        • 说明
        • demo
      • 5 布尔运算符
        • 说明
        • demo
      • 6 逻辑运算
        • 说明
        • demo
    • 流程控制
      • 1 分支
        • 11 单分支
        • 12 双分支
    • 函数
      • 1 定义
        • 说明
      • 2 调用
      • 3 函数传参
    • 特殊字符
        • demo

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"|bc3xiaox@xiaox:~/study/shell$ echo "1.1 + 2"|bc3.1# 赋值不能有空格xiaox@xiaox:~/study/shell$ a = 1a:未找到命令xiaox@xiaox:~/study/shell$ a=1# 中括号内侧要有空格 xiaox@xiaox:~/study/shell$ [1 == 2] && echo 1 || echo 0[1:未找到命令0xiaox@xiaox:~/study/shell$ [ 1 == 2 ] && echo 1 || echo 00# 此处注意,等号两侧要有空格,猜测将"1==2"当做了一个不为null的字符串,返回1xiaox@xiaox:~/study/shell$ [ 1==2 ] && echo 1 || echo 01# 针对上例的一个小测试,猜测是对的xiaox@xiaox:~/study/shell$ a=1==2xiaox@xiaox:~/study/shell$ echo $a1==2

1.2 整数关系运算符

用法

[]中或与test一起使用

参数

操作符 说明 -eq equal -lt less than -le less equal -gt great than -ge great equal

demo

# 相等xiaox@xiaox:~/study/shell/menu$ test 1 -eq 2 && echo 1 || echo 00xiaox@xiaox:~/study/shell/menu$ test 1 -eq 1 && echo 1 || echo 01# 小于xiaox@xiaox:~/study/shell/menu$ test 1 -lt 0 && echo 1 || echo 00xiaox@xiaox:~/study/shell/menu$ test 0 -lt 1 && echo 1 || echo 01# 小于等于xiaox@xiaox:~/study/shell/menu$ test 0 -le 1 && echo 1 || echo 01xiaox@xiaox:~/study/shell/menu$ test 0 -le 0 && echo 1 || echo 01xiaox@xiaox:~/study/shell/menu$ test 1 -le 0 && echo 1 || echo 00# 大于xiaox@xiaox:~/study/shell/menu$ test 1 -gt 0 && echo 1 || echo 01xiaox@xiaox:~/study/shell/menu$ test 0 -gt 1 && echo 1 || echo 00# 大于等于xiaox@xiaox:~/study/shell/menu$ test 1 -ge 0 && echo 1 || echo 01xiaox@xiaox:~/study/shell/menu$ test 1 -ge 1 && echo 1 || echo 01xiaox@xiaox:~/study/shell/menu$ test 0 -ge 1 && echo 1 || echo 00# 在[]中使用, 与test相似xiaox@xiaox:~/study/shell/menu$ [ 0 -eq 1 ] && echo 1 || echo 00xiaox@xiaox:~/study/shell/menu$ [ 0 -eq 0 ] && echo 1 || echo 01

1.3 字符串

参数

操作符 说明 = 相等返回True != 不等返回True -z 长度为0返回True -n 长度不为0返回True str 字符串不为空返回True

demo

# =xiaox@xiaox:~$ [ "a" = "a" ] && echo 1 || echo 01xiaox@xiaox:~$ [ "a" = "b" ] && echo 1 || echo 00# !=xiaox@xiaox:~$ [ "a" != "a" ] && echo 1 || echo 00xiaox@xiaox:~$ [ "a" != "b" ] && echo 1 || echo 01# -zxiaox@xiaox:~$ [ -z "" ] && echo 1 || echo 01xiaox@xiaox:~$ [ -z "a" ] && echo 1 || echo 00# -nxiaox@xiaox:~$ [ -n "" ] && echo 1 || echo 00xiaox@xiaox:~$ [ -n "a" ] && echo 1 || echo 01# strxiaox@xiaox:~$ unset axiaox@xiaox:~$ echo $axiaox@xiaox:~$ [ "$a" ] && echo 1 || echo 00xiaox@xiaox:~$ a="a"xiaox@xiaox:~$ [ "$a" ] && echo 1 || echo 01xiaox@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

# -dxiaox@xiaox:~/study$ test -d shell && echo 1 || echo 01xiaox@xiaox:~/study$ touch myfilexiaox@xiaox:~/study$ test -d myfile && echo 1 || echo 00# -fxiaox@xiaox:~/study$ test -f myfile && echo 1 || echo 01xiaox@xiaox:~/study$ test -f shell && echo 1 || echo 00# -rxiaox@xiaox:~/study$ ll总用量 12drwxrwxr-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 myfiledrwxrwxr-x  3 xiaox xiaox 4096 1029 12:05 shell/xiaox@xiaox:~/study$ test -r shell && echo 1 || echo 01xiaox@xiaox:~/study$ chmod -r myfile xiaox@xiaox:~/study$ ll总用量 12drwxrwxr-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 myfiledrwxrwxr-x  3 xiaox xiaox 4096 1029 12:05 shell/xiaox@xiaox:~/study$ test -r myfile && echo 1 || echo 00# -w# -x# -sxiaox@xiaox:~/study$ clearxiaox@xiaox:~/study$ ll总用量 12drwxrwxr-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 myfiledrwxrwxr-x  3 xiaox xiaox 4096 1029 12:05 shell/xiaox@xiaox:~/study$ test -s myfile && echo 1 || echo 00xiaox@xiaox:~/study$ echo "text" >> myfile xiaox@xiaox:~/study$ ll总用量 16drwxrwxr-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 myfiledrwxrwxr-x  3 xiaox xiaox 4096 1029 12:05 shell/xiaox@xiaox:~/study$ test -s myfile && echo 1 || echo 01# -exiaox@xiaox:~/study$ test -e myfile && echo 1 || echo 01

1.5 布尔运算符

说明

在test或[]中使用

操作符 说明 !-o-a

demo

# !xiaox@xiaox:~/study$ [ ! 1 -eq 1 ] && echo 1 || echo 00xiaox@xiaox:~/study$ [ 1 -eq 1 ] && echo 1 || echo 01# -oxiaox@xiaox:~/study$ [ 1 -eq 1 -o 1 -eq 0 ] && echo 1 || echo 01# -axiaox@xiaox:~/study$ [ 1 -eq 1 -a 1 -eq 0 ] && echo 1 || echo 00

1.6 逻辑运算

说明

[[]]中使用

操作符 说明 && 逻辑与 `

demo

# ||xiaox@xiaox:~/study$ [[ 1 -eq 1 || 1 -eq 0 ]] && echo 1 || echo 01# &&xiaox@xiaox:~/study$ [[ 1 -eq 1 && 1 -eq 0 ]] && echo 1 || echo 00

2. 流程控制

2.1 分支

2.1.1 单分支

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

2.1.2 双分支

if 条件1 then   指令1elif 条件2 then  指令2else  指令3fi

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命令大全