Shell 基本运算符

算术运算符:

运算符 描述 例子
+ Addition - Adds values on either side of the operator `expr $a + $b` will give 30
- Subtraction - Subtracts right hand operand from left hand operand `expr $a - $b` will give -10
* Multiplication - Multiplies values on either side of the operator `expr $a * $b` will give 200
/ Division - Divides left hand operand by right hand operand `expr $b / $a` will give 2
% Modulus - Divides left hand operand by right hand operand and returns remainder `expr $b % $a` will give 0
= Assignment - Assign right operand in left operand a=$b would assign value of b into a
== Equality - Compares two numbers, if both are same then returns true. [ $a == $b ] would return false.
!= Not Equality - Compares two numbers, if both are different then returns true. [ $a != $b ] would return true.

这是非常重要的,这里要注意,所有的条件式将放在方括号内,他们身边有一个空格,例如 [ $a == $b ]是正确的,为[$a==$b] 是不正确的。

所有的算术计算,使用长整数。

关系运算符:

Bourne Shell的支持,关系运算符的具体数值。这些运算符不能使用字符串值,除非它们的值是数字。

例如,运算符将努力检查10和20之间的关系,以及在“10”和“20”,但不是“10”和“21”之间。

假设变量a=10,变量b=20:

运算符 描述 示例
-eq Checks if the value of two operands are equal or not, if yes then condition becomes true. [ $a -eq $b ] is not true.
-ne Checks if the value of two operands are equal or not, if values are not equal then condition becomes true. [ $a -ne $b ] is true.
-gt Checks if the value of left operand is greater than the value of right operand, if yes then condition becomes true. [ $a -gt $b ] is not true.
-lt Checks if the value of left operand is less than the value of right operand, if yes then condition becomes true. [ $a -lt $b ] is true.
-ge Checks if the value of left operand is greater than or equal to the value of right operand, if yes then condition becomes true. [ $a -ge $b ] is not true.
-le Checks if the value of left operand is less than or equal to the value of right operand, if yes then condition becomes true. [ $a -le $b ] is true.

这里要注意,所有的条件式将放在方括号内,他们周围有一个空格,这是非常重要的,例如 [ $a <= $b ]是正确的, [$a <= $b]是不正确的。

布尔运算:

布尔运算符有以下Bourne Shell的支持。

假设变量一个变量b=10,然后变量b=20:

运算符 描述 示例
! This is logical negation. This inverts a true condition into false and vice versa. [ ! false ] is true.
-o This is logical OR. If one of the operands is true then condition would be true. [ $a -lt 20 -o $b -gt 100 ] is true.
-a This is logical AND. If both the operands are true then condition would be true otherwise it would be false. [ $a -lt 20 -a $b -gt 100 ] is false.

字符串运算符:

有下列字符串运算由Bourne Shell支持。

假设变量a=“abc”和变量b=“efg”:

运算符 描述 例子
= Checks if the value of two operands are equal or not, if yes then condition becomes true. [ $a = $b ] is not true.
!= Checks if the value of two operands are equal or not, if values are not equal then condition becomes true. [ $a != $b ] is true.
-z Checks if the given string operand size is zero. If it is zero length then it returns true. [ -z $a ] is not true.
-n Checks if the given string operand size is non-zero. If it is non-zero length then it returns true. [ -z $a ] is not false.
str Check if str is not the empty string. If it is empty then it returns false. [ $a ] is not false.

文件测试操作:

有以下是操作测试Unix文件相关联的各种属性。

假设一个的变量文件保存现有文件名“test”,其大小为100字节,有读,写和执行权限:

操作符 描述 示例
-b file Checks if file is a block special file if yes then condition becomes true. [ -b $file ] is false.
-c file Checks if file is a character special file if yes then condition becomes true. [ -b $file ] is false.
-d file Check if file is a directory if yes then condition becomes true. [ -d $file ] is not true.
-f file Check if file is an ordinary file as opposed to a directory or special file if yes then condition becomes true. [ -f $file ] is true.
-g file Checks if file has its set group ID (SGID) bit set if yes then condition becomes true. [ -g $file ] is false.
-k file Checks if file has its sticky bit set if yes then condition becomes true. [ -k $file ] is false.
-p file Checks if file is a named pipe if yes then condition becomes true. [ -p $file ] is false.
-t file Checks if file descriptor is open and associated with a terminal if yes then condition becomes true. [ -t $file ] is false.
-u file Checks if file has its set user id (SUID) bit set if yes then condition becomes true. [ -u $file ] is false.
-r file Checks if file is readable if yes then condition becomes true. [ -r $file ] is true.
-w file Check if file is writable if yes then condition becomes true. [ -w $file ] is true.
-x file Check if file is execute if yes then condition becomes true. [ -x $file ] is true.
-s file Check if file has size greater than 0 if yes then condition becomes true. [ -s $file ] is true.
-e file Check if file exists. Is true even if file is a directory but exists. [ -e $file ] is true.
#!/bin/sh

a=10
b=20
val=`expr $a + $b`
echo "a + b : $val" val=`expr $a - $b`
echo "a - b : $val" val=`expr $a * $b`
echo "a * b : $val" val=`expr $b / $a`
echo "b / a : $val" val=`expr $b % $a`
echo "b % a : $val" if [ $a == $b ]
then
echo "a is equal to b"
fi if [ $a != $b ]
then
echo "a is not equal to b"
fi

记下有以下几点:

  • 运算符和表达式之间必须有空格,例如2+2是不正确的,因为它应该写成 2 + 2。

  • ``,称为倒逗号之间应包含完整的表达。

  • 应该用*符号的乘法。

    #!/bin/sh
    
    a=10
    b=20 if [ $a -eq $b ]
    then
    echo "$a -eq $b : a is equal to b"
    else
    echo "$a -eq $b: a is not equal to b"
    fi if [ $a -ne $b ]
    then
    echo "$a -ne $b: a is not equal to b"
    else
    echo "$a -ne $b : a is equal to b"
    fi if [ $a -gt $b ]
    then
    echo "$a -gt $b: a is greater than b"
    else
    echo "$a -gt $b: a is not greater than b"
    fi if [ $a -lt $b ]
    then
    echo "$a -lt $b: a is less than b"
    else
    echo "$a -lt $b: a is not less than b"
    fi if [ $a -ge $b ]
    then
    echo "$a -ge $b: a is greater or equal to b"
    else
    echo "$a -ge $b: a is not greater or equal to b"
    fi if [ $a -le $b ]
    then
    echo "$a -le $b: a is less or equal to b"
    else
    echo "$a -le $b: a is not less or equal to b"
    fi
#!/bin/sh

a=10
b=20 if [ $a != $b ]
then
echo "$a != $b : a is not equal to b"
else
echo "$a != $b: a is equal to b"
fi if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a -lt 100 -a $b -gt 15 : returns true"
else
echo "$a -lt 100 -a $b -gt 15 : returns false"
fi if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a -lt 100 -o $b -gt 100 : returns true"
else
echo "$a -lt 100 -o $b -gt 100 : returns false"
fi if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a -lt 100 -o $b -gt 100 : returns true"
else
echo "$a -lt 100 -o $b -gt 100 : returns false"
fi
#!/bin/sh

a="abc"
b="efg" if [ $a = $b ]
then
echo "$a = $b : a is equal to b"
else
echo "$a = $b: a is not equal to b"
fi if [ $a != $b ]
then
echo "$a != $b : a is not equal to b"
else
echo "$a != $b: a is equal to b"
fi if [ -z $a ]
then
echo "-z $a : string length is zero"
else
echo "-z $a : string length is not zero"
fi if [ -n $a ]
then
echo "-n $a : string length is not zero"
else
echo "-n $a : string length is zero"
fi if [ $a ]
then
echo "$a : string is not empty"
else
echo "$a : string is empty"
fi
#!/bin/sh

file="/var/www/yiibai/unix/test.sh"

if [ -r $file ]
then
echo "File has read access"
else
echo "File does not have read access"
fi if [ -w $file ]
then
echo "File has write permission"
else
echo "File does not have write permission"
fi if [ -x $file ]
then
echo "File has execute permission"
else
echo "File does not have execute permission"
fi if [ -f $file ]
then
echo "File is an ordinary file"
else
echo "This is sepcial file"
fi if [ -d $file ]
then
echo "File is a directory"
else
echo "This is not a directory"
fi if [ -s $file ]
then
echo "File size is zero"
else
echo "File size is not zero"
fi if [ -e $file ]
then
echo "File exists"
else
echo "File does not exist"
fi

Shell记录-Shell脚本基础(二)的更多相关文章

  1. Shell记录-Shell脚本基础(一)

    Shell 注释: 你可以把注释,在你的脚本如下: #!/bin/bash # Author : Zara Ali # Copyright (c) Tutorialsyiibai.com # Scri ...

  2. -Shell 教程 Bash 脚本 基础语法 MD

    目录 目录 Shell 简介 Shell 脚本 Shell 环境 第一个shell脚本 Shell 变量 定义变量 使用变量 只读变量 删除变量 Shell 字符串 单引号 双引号 字符串基本操作 S ...

  3. Shell记录-Shell脚本基础(四)

    while循环,使您能够重复执行一组命令,直到某些条件发生.它通常用于当你需要反复操纵的变量值. 语法 while command do Statement(s) to be executed if ...

  4. Shell记录-Shell脚本基础(三)

    if...fi 语句的基本控制语句,它允许Shell有条件作出决定并执行语句. 语法 if [ expression ] then Statement(s) to be executed if exp ...

  5. Shell记录-Shell脚本基础(六)

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行. 1.命令格式 watch[参数][命令] ...

  6. Shell记录-Shell脚本基础(五)

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  7. 【shell 练习4】编写Shell用户管理脚本(二)

    一.创建.删除.查看用户,随机生成八位数密码 #!/bin/bash #Author:yanglt #!/bin/bash #Author:yanglt #Blog:https://www.cnblo ...

  8. Shell记录-Shell命令(其他)

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. .命令格式 top [参数] Shell 2.命令功能 显示当前系统正在执行的 ...

  9. Shell记录-Shell命令(定时任务)

    在Linux系统中, at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron(crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因 ...

随机推荐

  1. 解决Cygwin编译cocos2dx 遇到的 error: 'UINT64_C' was not declared in this scope 问题

    环境工具:Win10.VS2013.cocos2d-x-2.2.6.Cygwin.ADT 问题来源:写了一个小游戏,VS2013上运行成功,就尝试着打包apk,项目导入到ADT里面,添加了cocos2 ...

  2. 进阶系列(10)—— C#元数据和动态编程

    一.元数据的介绍 元数据是用来描述数据的数据(Data that describes other data).单单这样说,不太好理解,我来举个例子.下面是契诃夫的小说<套中人>中的一段,描 ...

  3. 项目Beta冲刺(团队)第四天

    1.昨天的困难 返回提问者昵称的时候返回信息不全,个别信息没有返回过去 一开始ProgressBar控件的显示有问题 需要实现类似聊天的功能,采用listview承载聊天内容,对于自定义适配器的构建使 ...

  4. angularJS1笔记-(3)-购物车增删改查练习

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  5. CANOpen学习指南

    对于初学者,相对于其他总线的资料来说,在国内CANOpen的资料并不多.而且并不是所有资料都适合初学者看的.这里给出一些建议,对CANOpen感兴趣的,可以参考一下学习的顺序. 前提:需要对CAN总线 ...

  6. [华商韬略] 拉里·埃里森(Larry Elison) 的传奇人生

    拉里·埃里森(Larry Elison) 的传奇人生   开战机.玩游艇.盖皇宫,挑战比尔·盖茨,干掉50多家硅谷豪强……全世界比拉里·埃里森更有钱的只有5个,像他这样的硅谷“坏孩子”却是唯一. 19 ...

  7. 深入探索.NET内部了解CLR如何创建运行时对象

    前言 SystemDomain, SharedDomain, and DefaultDomain. 对象布局和内存细节. 方法表布局. 方法分派(Method dispatching). 因为公共语言 ...

  8. org.hibernate.UnknownEntityTypeException: Unable to locate persister: com.hibernate2.pojo.News at org.hibernate.internal.SessionFactoryImpl.locateEntityPersister(SessionFactoryImpl.java:797)

    使用的是hibernate5的方法: ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySetti ...

  9. UVAlive4287_Proving Equivalences

    题意是告诉你有n个命题,m条递推关系,表示某个命题可以推出另外一个命题. 现在问你至少在增加多少个递推关系可以保证所有命题两两互推. 命题为点,关系为有向边,题目转化成为至少增加多少条有向边使得整个图 ...

  10. 远程连接工具SSH和linux的连接

    实际开发中,Linux服务器都在其他的地方,我们要通过远程的方式去连接Linux并操作它,Linux远程的操作工具有很多,企业中常用的有Puttty.secureCRT.SSH Secure等.我使用 ...