美文网首页
shell-2.read命令、expr算数表达式、test变量测

shell-2.read命令、expr算数表达式、test变量测

作者: 青丝如梦 | 来源:发表于2020-03-07 14:13 被阅读0次

read命令

作用:从键盘读入数据,赋给变量
测试脚本:

[root@VM_16_6_centos ~]# cat read.sh 
#!/bin/bash
echo "请输入三个数字:"

read param1 param2 param3
echo "参数1:$param1"
echo "参数2:$param2"
echo "参数3:$param3"

执行测试脚本:

[root@VM_16_6_centos ~]# sh read.sh
请输入三个数字:
11 22 33
参数1:11
参数2:22
参数3:33

expr命令

作用:对整数型变量进行算数运算,运算符之间必须要有空格

[root@VM_16_6_centos ~]# expr 3 + 5
8
[root@VM_16_6_centos ~]# var1=8
[root@VM_16_6_centos ~]# var2=2
[root@VM_16_6_centos ~]# expr $var1 + $var2
10
[root@VM_16_6_centos ~]# expr $var1 - $var2
6
[root@VM_16_6_centos ~]# expr $var1 / $var2
4
[root@VM_16_6_centos ~]# expr $var1 \* $var2
16

[root@VM_16_6_centos ~]# var1=8
[root@VM_16_6_centos ~]# expr `expr 5 + 11` / $var1
2

[root@VM_16_6_centos ~]# var2=8
[root@VM_16_6_centos ~]# var3=2
[root@VM_16_6_centos ~]# var4=`expr $var2 / $var3`
[root@VM_16_6_centos ~]# echo $var4
4

[root@VM_16_6_centos ~]# expr 4 - 7
-3

test:变量测试语句

测试范围:整数、字符串,文件

  • 测试字符串和变量:
    test str1==str2 #测试是否相等 teststr1!=str2 #测试是否不相等
    test str1 #如果str1不为空,则返回结果为真
    test -n str1 #如果字符串长度不为0,则返回结果为真 test -zstr1 #如果字符串长度为0,则返回结果为真

  • 测试整数:
    test int1 -eq int2 #测试两个数是否相等
    test int1 -ge int2 #>=
    test int1 -gt int2 #>
    test int1 -le int2 #<=
    test int1 -lt int2 #<
    test int1 -ne int2 #测试两个数是否不相等

注:也可省略test,简写为:[int1 -lt int2]

  • 测试文件:
    test -d file #测试是否为目录
    test -f file #测试是否为文件
    test -x file #测试是否是可执行的
    test -r file #测试文件是否可读
    test -w file #测试文件是否可写
    test -e file #测试文件是否存在
    test -s file #测试文件大小是否为空文件(0:空文件)
    test -c file #测试文件是否是字符特殊文件
    test -b file #测试文件是否是块设备(光驱、软盘等)文件

注:也可省略test,简写为:[ -x file]

if流程控制

  • if
    一下两种if写法均可:
[root@VM_16_6_centos ~]# cat if.sh 
#!/bin/bash
echo "if test"
if [ -x /bin/ls ] ; then
    /bin/ls
fi
echo "========================"
if [ -x /bin/ls ]
then
    /bin/ls
fi

[root@VM_16_6_centos ~]# bash if.sh 
if test
example.sh  if.sh  read.sh  redis-stable.tar.gz  z.sh
========================
example.sh  if.sh  read.sh  redis-stable.tar.gz  z.sh
[root@VM_16_6_centos ~]# 
  • if-else
[root@VM_16_6_centos ~]# cat if-else.sh 
#!/bin/bash

if [ -x /etc/passwd ] ; then
    /bin/ls
else
    pwd
fi

[root@VM_16_6_centos ~]# 
[root@VM_16_6_centos ~]# sh if-else.sh 
/root
[root@VM_16_6_centos ~]# chmod +x /etc/passwd
[root@VM_16_6_centos ~]# sh if-else.sh 
example.sh  if-else.sh  if.sh  read.sh  redis-stable.tar.gz  z.sh
  • 多条件联合
    -a 或 &&:逻辑与,当两个条件都为真时,结果为真
    -o 或 ||:逻辑或,两个条件有一个成立,结果为真
[root@VM_16_6_centos ~]# cat elif.sh 
#!/bin/bash

echo "input a file name:"
read file_name

if [ -d $file_name ] ; then
    echo " $file_name is a dir"
elif [ -f $file_name ] ; then
    echo " $file_name is file"
elif [ -c $file_name -o -b $file_name ] ; then
    echo " $file_name is a device file"
else
    echo " $file_name is an unknow file "
fi

[root@VM_16_6_centos ~]# 
[root@VM_16_6_centos ~]# sh elif.sh 
input a file name:
/root/
 /root/ is a dir
[root@VM_16_6_centos ~]# sh elif.sh 
input a file name:
/root/elif.sh
 /root/elif.sh is file
[root@VM_16_6_centos ~]# sh elif.sh 
input a file name:
/dev/tty0
 /dev/tty0 is a device file
[root@VM_16_6_centos ~]# sh elif.sh 
input a file name:
/top/aaaaa
 /top/aaaaa is an unknow file 
[root@VM_16_6_centos ~]# 

相关文章

网友评论

      本文标题:shell-2.read命令、expr算数表达式、test变量测

      本文链接:https://www.haomeiwen.com/subject/pgbqrhtx.html