篇二:shell传递参数和基本运算符

tech2023-05-28  114

说明:本文为学习笔记,如有雷同,纯属意料之中😜

文章目录

shell传递参数1.向脚本传递参数2.特殊字符处理参数 shell基本运算符1.算数运算符2.关系运算符3.布尔运算符4.逻辑运算符5.字符串运算符6.文件测试运算符

本篇文章主要介绍shell传递参数的方法以及shell的基本运算符,这些常用的需掌握。

shell传递参数

1.向脚本传递参数

在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……($0代表执行文件的文件名,$1,$2,$3…代表的是第几个参数) 向脚本传递参数用法,新建一个param.sh文件,编辑内容如下:

#!/bin/bash echo "shell 传递参数示例:" echo "执行的文件名:$0" echo "第一个参数:$1" echo "第二个参数:$2" echo "第三个参数:$3"

执行的时候加上可执行权限,并且传递参数,执行结果如下:

2.特殊字符处理参数

处理参数的特殊字符含义$#传递到脚本的参数个数$*传递参数作为一个字符串显示;如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数$$脚本运行的当前进程ID号$!后台运行的最后一个进程ID号$@传递参数作为一个字符串显示;如"$@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数$-显示shell使用的当前选项$?显示最后命令的退出状态(0表示没有错误,其他任何值表明有错误) echo "-----------特殊字符处理参数--------------" echo "\$#参数个数为:$#" echo "\$*传递参数作为一个字符串显示:$*" echo "\$$脚本运行的当前进程ID号:$$" echo "\$!后台运行的最后一个进程ID号:$!" echo "\$@传递参数作为一个字符串显示:$@" echo "\$-显示shell使用的当前选项:$-" echo "\$?显示最后命令的退出状态:$?" echo "---------\$*和\$@的区别-----------" for i in "$*"; do echo "\$*的输出:$i" done echo "-------分割线--------" for i in "$@"; do echo "\$@的输出:$i" done

输出结果如下:

shell基本运算符

1.算数运算符

算数运算符包含加减乘除,取余、赋值、相等、不相等。下面是常用算术运算符:

运算符说明+加法-减法*乘法/除法%取余=赋值==相等!=不相等

下面举个例子:

#!/bin/bash echo "这是两数相加:`expr $1 + $2`" echo "这是两数相减:`expr $1 - $2`" echo "这是两数相乘:`expr $1 \* $2`" echo "这是两数相除:`expr $1 / $2`" echo "这是两数取余:`expr $1 % $2`" if [ $1 == $2 ] then echo "两数相等,都是$1" else echo "两数不相等" fi if [ $1 != $2 ] then echo "两数不相等" else echo "两数相等" fi

运行结果如下: 注意: 1)表达式和运算符之间要有空格,例如$1-$2是不对的,必须写成$1 - $2 2)完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边 3)条件表达式要放在方括号之间,并且要有空格,例如:[ $1==$2 ]是错误的,必须写成 [ $1 == $2 ] 4)乘号“*”前边必须加反斜杠“\”才能实现乘法运算 5)if…then…else…fi 是条件语句

2.关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。常用关系运算符如下:

运算符说明-eq判断两个数是否相等,相等就返回true-ne判断两个数是否不相等,不相等就返回true-gt判断左边的数是否大于右边的,如果是就返回true-lt判断左边的数是否小于右边的,如果是就返回true-ge判断左边的数是否大于等于右边的,如果是就返回true-le判断左边的数是否小于等于右边的,如果是就返回true

下面举个例子:

if [ $1 -eq $2 ] then echo "1.eq输入的第一个数等于第二个数" else echo "1.eq输入的第一个数不等于第二个数" fi if [ $1 -ne $2 ] then echo "2.ne输入的第一个数不等于第二个数" else echo "2.ne输入的第一个数等于第二个数" fi if [ $1 -gt $2 ] then echo "3.gt输入的第一个大于第二个数" else echo "3.gt输入的第一个不大于第二个数" fi if [ $1 -lt $2 ] then echo "4.lt左边的数小于右边的数" else echo "4.lt左边的数大于右边的数" fi if [ $1 -ge $2 ] then echo "5.ge左边的数大于右边的数" else echo "5.ge左边的数小于右边的数" fi if [ $1 -le $2 ] then echo "6.le左边的数小于等于右边的数" else echo "6.le左边的数大于右边的数" fi

传参输入16 22 运行结果如下:

3.布尔运算符

常用布尔运算符如下:

运算符说明!非运算,表达式为true则返回false,佛则返回true-o或运算,有一个表达式为true则返回true-a与运算,两个表达式都为true才返回true if [ $1 != $2 ] then echo "非运算:$1 不等于 $2" else echo "非运算:$1 等于 $2" fi if [ $1 -lt $2 -o $1 -gt $2 ] then echo "或运算:其中一个表达式为true结果就是true" else echo "或运算:两个运算都是false" fi if [ $1 -lt 15 -a $2 -gt 15 ] then echo "与运算:两个表达式都为true才为true" else echo "与运算:两个表达式存在不为true的表达式" fi

传参输入16 22,运行结果如下:

4.逻辑运算符

常用逻辑运算符如下:

运算符说明&&逻辑and,两个为真才为真-o逻辑or,一个为真就为真 if [[ $1 -le 10 && $2 -le 20 ]] then echo "逻辑and,都为真,返回true" else echo "逻辑and,存在不为真的项" fi if [[ $1 -ge 15 || $2 -ge 3 ]] then echo "逻辑or,表达式任意一个为真,就返回true" else echo "逻辑or,表达式中都为假,就返回true" fi

传参输入 16 22,运行结果如下:

5.字符串运算符

常用算数运算符如下:

运算符说明=判断两个字符串是否相等,相等就返回true!=判断两个字符串是否相等,不相等返回true-z判断字符串长度是否为0,为0返回true-n判断字符串长度是否不为0.不为0返回true$判断字符串是否为空,不为空返回true a="abc" b="efg" if [ $a = $b ] then echo "$a = $b:a等于b" else echo "$a = $b:a不等于b" fi if [ $a != $b ] then echo "a不等于b" else echo "a等于b" fi if [ -z $a ] then echo "字符串的长度为0" else echo "字符串长度不为0" fi if [ -n "$a" ] then echo "字符串长度不为0" else echo "字符串长度为0" fi

运行结果如下:

6.文件测试运算符

文件测试运算符用于见测unix文件的属性,常见的如下:

运算符说明-b file检测文件是否是块设备文件,如果是,则返回 true-c file检测文件是否是字符设备文件,如果是,则返回 true-d file检测文件是否是目录,如果是,则返回 true-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true-g file检测文件是否设置了 SGID 位,如果是,则返回 true-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true-p file检测文件是否是有名管道,如果是,则返回 true-u file检测文件是否设置了 SUID 位,如果是,则返回 true-r file检测文件是否可读,如果是,则返回 true-w file检测文件是否可写,如果是,则返回 true-x file检测文件是否可执行,如果是,则返回 true-s file检测文件是否为空(文件大小是否大于0),不为空返回 true-e file检测文件(包括目录)是否存在,如果是,则返回 true

注意:file为文件的路径

file="test.sh" #该文件具有可读权限 if [ -r $file ] then echo "文件可读" else echo "文件不可读" fi

好啦,本次笔记先记到这里啦~学习是一个痛苦的过程,笔记还是要认真写滴,也要多加练习哦,还要继续加油鸭(ง •_•)ง

最新回复(0)