shell脚本shell script(2)

1 算数运算

语法

变量 = $((运算内容))

例子:计算两个输入的数字的乘积

shell中默认支持整数运算

[YAOYE@yaoyeLinux shellscript]$ more calcu.sh 
#!/bin/bash
# 这个shell用来计算输入两个数的乘积
# 2020-05-01 first release
PATH=/usr/local/src/java/jdk1.8/bin:/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/YAOYE/bin
export PATH
echo -e "请输入两个数字\n"
read -p "第一个:" first
read -p "第二个:" second
result=$(($first*$second))
echo -e "\n 结果是: $result"
[YAOYE@yaoyeLinux shellscript]$ sh calcu.sh 
请输入两个数字

第一个:35
第二个:4

 结果是: 140
[YAOYE@yaoyeLinux shellscript]$ 

2 source 或者 sh 执行shell程序的区别

用 source 命令执行shell脚本时,是在当前shell程序中直接执行shell脚本中的程序,则shell脚本中设置的变量对当前shell程序有效.
用 sh 命令执行shell脚本的时候,是在当前shell程序中开启新的shell子程序,则子程序中定义的变量对当前shell程序无效,

[YAOYE@yaoyeLinux shellscript]$ sh calcu.sh 
请输入两个数字

第一个:35
第二个:4

 结果是: 140
[YAOYE@yaoyeLinux shellscript]$ echo $result

[YAOYE@yaoyeLinux shellscript]$ source calcu.sh 
请输入两个数字

第一个:25
第二个:4

 结果是: 100
[YAOYE@yaoyeLinux shellscript]$ echo $result    
100
[YAOYE@yaoyeLinux shellscript]$ 

3 用test指令做判断

例子:输入文件名判断文件是否存在并且列出操作权限
[YAOYE@yaoyeLinux shellscript]$ vi testOrder.sh 
#!/bin/bash
# 输入文件名判断文件是否存在并且列出操作权限
# 2020-05-02 first release

# 输入文件名
echo -e "请输入文件名\n\n"
read -p "文件名: " filename
test -z $filename && echo -e "请输入文件名" && exit 0 #test -z 表示判断是否空字符串,如果是空字符串返回true

# 判断文件是否存在
test ! -e $filename && echo "文件 '$filename' 不存在" && exit 0 #test -e 表示判断文件是否存在

# 判断文件的操作权限
test -f $filename && filetype="文件"
test -d $filename && filetype="文件夹"
test -r $rilename && prem="当前账号可以读"
test -w $rilename && prem="$prem 当前账号可以写"
test -x $rilename && prem="$prem 当前账号可以执行"

# 输出
echo "$filename 是一个 $filetype"
echo "$filename 权限 $prem"
[YAOYE@yaoyeLinux shellscript]$ sh testOrder.sh 
请输入文件名


文件名: testOrder.sh
testOrder.sh 是一个 文件
testOrder.sh 权限 当前账号可以读 当前账号可以写 当前账号可以执行
[YAOYE@yaoyeLinux shellscript]$ 
关于 test 指令后面跟着的选项
单个文件,比如 test -e 文件名/目录名

-e 是否存在
-f 是否为文件
-d 是否为目录

两个文件之间的比较,比如 test 文件1 -nt 文件2

-nt 文件1是否比文件2新
-ot 文件1是否比文件2旧
-ef 文件1和文件2是否是头一个文件

两个整数之间的判定,比如 test n1 -gt n1

-eq 相等
-ne 不相等
-gt n1大于n2
-lt n1小于n2
-ge n1大于等于n2
-le n1小于等于n2

对字符串进行判断,比如

test -z 字符串 判断字符串是空串或者不存在,空串或不存在返回true
test -n 字符串 判断字符串是否存在且不为空串,存在且不为空串返回true.
test 字符串1=字符串2 相等返回true
test 字符串1!=字符串2 相等返回false

多重判断条件

-a 与
例如: test -r 文件 -a -x 文件 是否同时具有读和执行权限
-o 或者
! 取反
例如: test ! -r 文件 不具有读权限返回true

4 使用[]进行判断

可以认为中括号是test语法的简化

例如:判断字符串是否是空字符串,并打印结果

[YAOYE@yaoyeLinux ~]$ testing2=123
[YAOYE@yaoyeLinux ~]$ [ -z "$testing2" ];echo $?
1 #执行失败,testing2不是空
[YAOYE@yaoyeLinux ~]$ testing2=
[YAOYE@yaoyeLinux ~]$ [ -z "$testing2" ];echo $?
0 #执行成功,testing2是空串
[YAOYE@yaoyeLinux ~]$ 

要注意由于中括号在shell脚本中除了代替test还有正则表达式中也会使用,为做区分,再当做test使用时,需要在 [ 的右侧和 ]的左侧留下空格.
例如:判断两个字符是否相等,注意下面判断使用的是==.和=没有区别.

[YAOYE@yaoyeLinux ~]$ 
[YAOYE@yaoyeLinux ~]$ [ "123" == "1233" ];echo $?     
1 #执行失败,说明不相等
[YAOYE@yaoyeLinux ~]$ [ "123" == "123" ];echo $? 
0 #执行成功,说明相等
[YAOYE@yaoyeLinux ~]$ 
使用[]的注意点

在中括号内的每个组件都需要用空格括起来,包括内部的 == 两侧.

中括号内无论是变量还是常量最好都用双引号括起来进行比较.因为有可能变量内存在空格报错,
比如:

[YAOYE@yaoyeLinux ~]$ testing="yao ye"                 
[YAOYE@yaoyeLinux ~]$ [ $testing == "yao ye" ];$echo $? 
-bash: [: too many arguments
-bash: 2: command not found
[YAOYE@yaoyeLinux ~]$ 
[YAOYE@yaoyeLinux ~]$ [ "$testing" == "yao ye" ];echo $?      
0 #执行成功说明相等
[YAOYE@yaoyeLinux ~]$ 

5 给shell脚本传递参数

编写shell脚本时,有些时候需要将变量当做参数传递给shell脚本来执行.

在shell脚本内可以直接用 $0 $1 $2 …来接受传入的参数,其中$0代表当前执行的shell脚本名称,$1是第一个参数,$2是第二个参数

比如下面这个shell脚本,运行时候我可以传入多个参数,但是程序中并没有使用到参数.

[YAOYE@yaoyeLinux shellscript]$ more parama.sh 
#!/bin/bash
# 测试参数
# 2020-05-08 first release

echo -e "$0" #输出脚本名称
[YAOYE@yaoyeLinux shellscript]$
[YAOYE@yaoyeLinux shellscript]$ sh parama.sh 01 02
parama.sh

其他用法
$#: 当前有几个参数
$@: 将所有参数用双引号括起来拼接成一个字符串
$*: 将参数用空格隔开形成一个自字符串

[YAOYE@yaoyeLinux shellscript]$ vi parama.sh 
#!/bin/bash
# 测试参数
# 2020-05-08 first release

echo -e "$0"
echo -e "$1"
echo -e "$2"
echo -e "$#"
echo -e "$@"
~                  
[YAOYE@yaoyeLinux shellscript]$ sh parama.sh 01 "02"
parama.sh
01
02
2
01 02
[YAOYE@yaoyeLinux shellscript]$ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值