算术运算符

设置变量a=10,b=4

+  加法

  1. [root@localhost ~]# echo $[$a+$b]
  2. 14

-  减法

  1. [root@localhost ~]# echo $[$a-$b]
  2. 6

*  乘法

  1. [root@localhost ~]# echo $[$a*$b]
  2. 40

/  除法,因为是整除,所以只等于2

  1. [root@localhost ~]# echo $[$a/$b]
  2. 2

%  取余

  1. [root@localhost ~]# echo $[$a%$b]
  2. 2

在脚本中可以使用expr调用

  1. [root@localhost ~]# echo `expr $a + $b`
  2. 14
  3. [root@localhost ~]# echo `expr $a - $b`
  4. 6
  5. [root@localhost ~]# echo `expr $a \* $b`
  6. 40
  7. [root@localhost ~]# echo `expr $a / $b`
  8. 2
  9. [root@localhost ~]# echo `expr $a % $b`
  10. 2

赋值运算符

=  赋值,用于变量赋值

  1. [root@localhost ~]# a=5
  2. [root@localhost ~]# b=$a
  3. [root@localhost ~]# echo $b
  4. 5

+=  变量经过加法运算后赋值

  1. [root@localhost ~]# x=0
  2. [root@localhost ~]# ((x+=5))
  3. [root@localhost ~]# echo $x
  4. 5

*=  变量经过乘法法运算后赋值

  1. [root@localhost ~]# x=5
  2. [root@localhost ~]# ((x*=5))
  3. [root@localhost ~]# echo $x
  4. 25

/=  变量经过除法法运算后赋值

  1. [root@localhost ~]# x=5
  2. [root@localhost ~]# ((x/=2))
  3. [root@localhost ~]# echo $x
  4. 2

%=  变量经过取余运算后赋值

  1. [root@localhost ~]# x=5
  2. [root@localhost ~]# ((x%=2))
  3. [root@localhost ~]# echo $x
  4. 1

字符串关系运算符

==  对比两个字符串是否相等,相等为真

  1. [root@localhost ~]# a=abc
  2. [root@localhost ~]# b=abc
  3. [root@localhost ~]# [[ $a == $b ]]
  4. [root@localhost ~]# echo $?      # $?返回上一条命令执行状态,0为成立,即为真

!=  对比两个字符串是否不想等,不想等为真

  1. [root@localhost ~]# a=abc
  2. [root@localhost ~]# b=abb
  3. [root@localhost ~]# [[ $a == $b ]]
  4. [root@localhost ~]# echo $?
  5. 1
  6. [root@localhost ~]# [[ $a != $b ]]
  7. [root@localhost ~]# echo $?
  8. 0

整数关系运算符

格式:[ 整数 运算符 整数 ]

-eq  等于

  1. [root@localhost ~]# [ 5 -eq 5 ]
  2. [root@localhost ~]# echo $?
  3. 0

-gt  大于

  1. [root@localhost ~]# [ 8 -gt 5 ]
  2. [root@localhost ~]# echo $?
  3. 0

-lt  小于

  1. [root@localhost ~]# [ 3 -lt 5 ]
  2. [root@localhost ~]# echo $?
  3. 0

-ge  大于等于

  1. [root@localhost ~]# [ 5 -ge 5 ]
  2. [root@localhost ~]# echo $?
  3. 0
  4. [root@localhost ~]# [ 5 -ge 3 ]
  5. [root@localhost ~]# echo $?
  6. 0

-le  小于等于

  1. [root@localhost ~]# [ 3 -le 3 ]
  2. [root@localhost ~]# echo $?
  3. 0
  4. [root@localhost ~]# [ 3 -le 5 ]
  5. [root@localhost ~]# echo $?
  6. 0

-ne  不等于

  1. [root@localhost ~]# [ 3 -ne 5 ]
  2. [root@localhost ~]# echo $?
  3. 0

文件的比较运算

-nt  (newer than)判断file1是否比file2新

  1. [root@localhost ~]# [ abc.txt -nt aaa.txt ]
  2. [root@localhost ~]# echo $?
  3. 1

-ot  (older than)判断file是否比file2旧

  1. [root@localhost ~]# [ abc.txt -ot aaa.txt ]
  2. [root@localhost ~]# echo $?
  3. 0

-ef  判断file1与file2是否为同一个文件,可用在判断hard link上

  1. [root@localhost ~]# [ abc.txt -ef aaa.txt ]
  2. [root@localhost ~]# echo $?
  3. 1

逻辑运算符

-a 或 && :逻辑与,“而且”的意思,前后两个表达式都成立时整个测试结果才为真,否则为假

  1. [root@localhost ~]# a=3
  2. [root@localhost ~]# b=6
  3. [root@localhost ~]# [ $a -ne 6 ] && [ $b -gt 9 ]
  4. [root@localhost ~]# echo $?    #因为a不等于6,b不大于9,所以左边成立,右边不成立,故总体是不成立的
  5. 1
  6. [root@localhost ~]# [ $a -ne 6 ] && [ $b -gt 4 ]
  7. [root@localhost ~]# echo $?    #因为a不等于6,b大于4,左右都是成立的,故总体成立
  8. 0
    [root@localhost ~]# [ $a -ne 6 -a $b -gt 4 ]
    [root@localhost ~]# echo $?
    0

-o 或 || : 逻辑或,“或者”的意思,操作符两边至少一个为真时,结果为真,否为为假

  1. [root@localhost ~]# a=3
  2. [root@localhost ~]# b=6
  3. [root@localhost ~]# [ $a -ne 6 ] || [ $b -gt 9 ]
  4. [root@localhost ~]# echo $?    #因为左边a不等于6成立,故整体成立
  5. 0
  6. [root@localhost ~]# [ $a -ne 3 ] || [ $b -gt 4 ]
  7. [root@localhost ~]# echo $?    #因为右边b大于4成立,故整体成立
  8. 0
  9. [root@localhost ~]# [ $a -ne 3 ] || [ $b -gt 9 ]
  10. [root@localhost ~]# echo $?    #因为左右两边都不成立,故整体不成立
  11. 1

! :逻辑否,当制定条件不成立时,返回结果为真

  1. [root@localhost ~]# [ ! $a -ne 3 ] || [ $b -gt 9 ]
  2. [root@localhost ~]# echo $?    #因为左边a等于3,经过-ne判断为假,又经过!否定了假,所以为真成立
  3. 0

test测试操作

test可以用[]代替,如test -e abc.txt可以写成 [ -e abc.txt ]

文件类型判断

-e  该文件名是否存在

-f  该文件名是否存在且为file

-d  该文件名是否存在且为目录

-b  该文件名是否存在且为一个block

-c  该文件名是否存在且为一个character device设备

-S  该文件名是否存在且为一个socket文件

-p  该文件名是否存在且为一个FIFO(pipe)文件

-L  该文件名是否存在且为一个连接文件

示例:

  1. [root@localhost ~]# touch abc.txt
  2. [root@localhost ~]# test -e abc.txt
  3. [root@localhost ~]# echo $?
  4. 0
  5. [root@localhost ~]# test -e asdfg.txt
  6. [root@localhost ~]# echo $?
  7. 1
  8. [root@localhost ~]# test -f abc.txt
  9. [root@localhost ~]# echo $?
  10. 0

文件权限检测

-r  检测文件名是否存在且具有“可读”权限

-w  检测文件名是否存在且具有“可写”权限

-x  检测文件名是否存在且具有“可执行”权限

-u  检测文件名是否存在且具有“SUID”权限

-g  检测文件名是否存在且具有“SGID”权限

-k  检测文件名是否存在且具有“Sticky bit”权限

-s  检测文件名是否存在且为“非空白文件”

示例:

  1. [root@localhost ~]# test -r abc.txt
  2. [root@localhost ~]# echo $?
  3. 0
  4. [root@localhost ~]# test -x abc.txt
  5. [root@localhost ~]# echo $?
  6. 1

字符串数据判断

-z  判断字符串是否为0,若为空返回true(0)

  1. [root@localhost ~]# test -z "abc"
  2. [root@localhost ~]# echo $?
  3. 1

-n  判断字符串是否为0,若为空返回false(0)

  1. [root@localhost ~]# test -n "abc"
  2. [root@localhost ~]# echo $?
  3. 0

流程控制

if单分支:当“条件成立”时执行相应的操作。

  1. if 条件测试操作
  2. then
  3.   命令序列
  4. fi

示例:当100大于80时,输出True

  1. if [ 100 -gt 80 ];
  2. then
  3. echo "True"
  4. fi

if双分枝:当“条件成立”、“条件不成立”时执行不同操作。

  1. if 条件测试命令
  2. then
  3. 命令序列1
  4. else
  5. 命令序列2
  6. fi

示例:当检查到存在abc.txt,输出True,否则输出False

  1. #!/bin/bash
  2. if [ -e abc.txt ];
  3. then
  4. echo "True"
  5. else
  6. echo "False"
  7. fi

if多分枝:相当于if语句嵌套,针对多个条件执行不同操作。

  1. if 条件测试命令1; then
  2. 命令序列1
  3. elif 条件测试命令2;then
  4. 命令序列2
  5. elif ...
  6. else
  7. 命令序列n
  8. fi

for循环:根据标量的不同取值,重复执行一组命令操作。

  1. for 变量名 in 取值列表
  2. do
  3. 命令序列
  4. done

示例1:依次打印数字1到5

  1. #!/bin/bash
  2. for x in [1..5]
  3. do
  4. echo number $x
  5. done

while条件循环:重复测试指令的条件,只要条件为真则反复执行对应的命令操作,直到条件为假。如果使用true作为循环条件能够产生无限循环。

  1. while 命令表达式
  2. do
  3. 命令列表
  4. done

示例:批量添加20个系统账户用户名依次为user1~20

  1. #!/bin/bash
  2. i=1
  3. while [ $i -le 20 ]
  4. do
  5. useradd user$1
  6. echo "" | passwd --stdin user$i &> /dev/null
  7. i=`expr $i + 1`
  8. done

Linux基础系列-Day9的更多相关文章

  1. Linux基础系列-Day2

    基础命令(文件内容管理) 1.cat:在当前终端显示文本文件内容 格式:cat [文件路径] -n 从1开始对所有输出的行数编号 -b 和-n相似,只不过对于空白行不编号:2.head:从文件内容开头 ...

  2. Linux基础系列-Day1

    Linux发展简史 Unix:1969年由美国电话电报公司(AT&T)贝尔实验室的两个工程师所创造的操作系统,它允许计算机同时处理多用户和程序. BSD:重要的Unix分支,1977年由加州大 ...

  3. Linux基础系列—Linux内核源码目录结构

    /** ****************************************************************************** * @author    暴走的小 ...

  4. Linux基础系列—Linux体系结构和Linux内核结构

    /** ****************************************************************************** * @author    暴走的小 ...

  5. Linux基础系列-Day8

    Shell编程基础 Shell介绍 Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器).它类似于windows下的的cmd.exe.它接收用户命令,然后调用相应的应用程序 ...

  6. Linux基础系列-Day7

    NFS服务(基于CentOS 7.0) NFS(Network File System),网络文件系统,是linux与linux之间进行文件共享的服务,在NFS应用,本地NFS的客户端可以透明地读写位 ...

  7. Linux基础系列-Day6

    Samba服务(基于CentOS 7.0) Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成,Samba主要用于Linux或UNIX和Windows系统之 ...

  8. Linux基础系列-Day5

    网络管理 ifconfig网络管理工具 ifconfig依赖于命令中使用一些选项属性,不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置,但是通过ifconfig修改的通常为临时配置,即系统 ...

  9. Linux基础系列-Day4

    top系统监控 top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具.通过top命令所提供的互动式界面,用热键可以管理. [root@centos-py ...

随机推荐

  1. python检测硬盘脚本

    #!/usr/bin/env python # _*_coding:utf-8_*_ import os import sys import statvfs def main(): '''deamon ...

  2. css 实现元素水平垂直居中总结5中方法

    个人总结,如有错误请指出,有好的建议请留言.o(^▽^)o 一.margin:0 auto:text-align:center:line-height方法 <div id="divAu ...

  3. java中各种循环

    简单介绍一下java中的一些循环 package test; import org.apache.log4j.Logger; import org.junit.Test; public class F ...

  4. 【BZOJ】1700: [Usaco2007 Jan]Problem Solving 解题

    [题意]给定n道题,每月末发放工资m,要求从1解到n,每道题需要在当月初付费ai,下月初付费bi,多道题可以安排在同月,求最少月数. [算法]DP [题解]参考自:[bzoj1700]Problem ...

  5. 【51NOD-0】1106 质数检测

    [算法]数学 #include<cstdio> #include<cmath> bool ok(int x) { int m=(int)sqrt(x+0.5); ;i<= ...

  6. javascript中break和continue

    1.break break语句会立即退出循环,强制执行循环后面的语句 var num = 0; for(var i=1;i<10;i++){ if(i%5 == 0){ break; } num ...

  7. Bitmap算法应用实例(转)

    关于数据库查询工作,例如有如下数据库表 要想统计所有90后的程序员该怎么做呢?用一条求交集的SQL语句即可: Select count(distinct Name) as 用户数 from table ...

  8. Android开发中的各种尺度单位

    px 像素(pixel),表示屏幕上一个物理像素点 不建议直接使用 px 绘制UI,因为受像素密度的影响,以 px 为单位绘制的UI在不同手机上显示的实际大小会不同 dp   (用于定义控件大小) 密 ...

  9. Perl6 Bailador框架(5):利用正则匹配路径

    use v6; use Bailador; =begin pod 我们在路径设置上, 可以利正则表达式捕获的字符串作为子例程参数 =end pod get '/perl6/(.+)' => su ...

  10. vue基本介绍

    https://cn.vuejs.org/v2/guide/ Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上 ...