Linux系统Bash(Shell)基础知识(3)

简介:

  在shell脚本编程中算术运算无疑是十分重要的;

  bash中执行整数算数运算的命令是let,其语法格式为:

  let arg...

  arg为单独的算术表达式如+,-,*,/,%,^等所构成的完整的算术表达式;

  其中^为平方运算,如2^3表示2的三次方;

  let命令可以使用如下方式替代:

  ((算术表达式))

  例如

  [root@localhost wjq]# let "a=2*3"

  [root@localhost wjq]# echo $a

  6

  [root@localhost wjq]# (("a=3*3"))

  [root@localhost wjq]# echo $a

  9


  除了简单的加减乘除运算,算术运算中还包括增强型运算方式和特殊的增强型运算方式;

  增强型运算方式:

  +=:如a+=b-->a=a+b

  -+:如a-=b-->a=a-b

  *=:如a*=b-->a=a*b

  %=:如a%=b-->a=a%b

  /=:如a/=b-->a=a/b

  转化为let命令运算为:

  [root@localhost wjq]# b=5

  [root@localhost wjq]# let "a+=b"

  [root@localhost wjq]# echo $a

  14

  [root@localhost wjq]# 

  特殊增强型运算:

  a++:a先将值赋给变量,再+1;

  ++a:a先+1,再将值赋给变量;

  a--:a先将值赋给变量,再-1;

  --a:a先-1,再将值赋给变量;

  转化为let命令的运算方式为:

  [root@localhost wjq]# a=4

  [root@localhost wjq]# b=5

  [root@localhost wjq]# let "a++"

  [root@localhost wjq]# let "a+=b"

  [root@localhost wjq]# echo $a

  10


  算术运算方法:

  ① let VAR=算术表达式

    #let “B=5+4”

    #echo $B

    将算术表达式先行进行算术运算,并将运算得到的结果保存到变量VAR;

    变量:存储数据的容器

    弱变量:弱类型变量,默认是字符型变量,数值型(不包括浮点型)


  ② VAR=$[算术表达式]

  [root@localhost wjq]# a=$[a*b]

  [root@localhost wjq]# echo $a

  50


  ③ VAR=$((算术表达式))

  算术表达式中如果有引用就用$引用,也可以省略

  [root@localhost wjq]# a=$((a*b))

  [root@localhost wjq]# echo $a

  250


  ④ exper ARGU1 ARGU2 ARGU3

          ARGU1和ARGU3 必须是数值

          ARGU2是运算符


  ⑤ echo “算术表达式” | bc(bc命令相当于计算器)

  [root@localhost wjq]# echo "3*4" | bc

  12


 条件测试语句:

  条件测试有三种测试语句

  一是test命令;

  二是用一堆方括号将其括起来,而这是完全等价的;

  test -f "/etc/passwd" 完全等价于 [ -f "/etc/passwd" ]

  三是[[条件表达式]];

  这三种表达式可以和多种系统运算符结合使用,这些系统运算符可以分为四类:数值测试运算符,字符串测试运算符,文件状态测试运算符,逻辑测试运算符;

  下列四种运算符皆在此使用第二种表达方式表示;

  

  数据测试运算符:使用双目操作符进行运算;

  [ n1 -eq n2 ]:测试n1和n2是否相等,相等为真,不等为假

  [ n1 -ne n2 ]:测试n1和n2是否不相等,不等为真,相等为假;

  [ n1 -lt n2 ]:测试的n1和n2,左边的是否小于右边的,小于为真,大于为假;

  [ n1 -gt n2 ]:测试的n1和n2,左边的是否大于右边的,大于为真,小于为假;

  [ n1 -le n2 ]:测试的n1和n2,左边的是否小于等于右边的;

  例

  [root@localhost wjq]# [ "$a" -eq 0 ] && echo "a等于0" || echo "a不等于0"

  a不等于0


  字符串测试运算符:

  使用单目运算符进行操作;

  -z ‘n1’:如果字符串长度为0,则测试条件为真;

  -n ‘n1’:如果字符串长度不为0;非空为真,空为假;

  [root@localhost wjq]# a='string'

  [root@localhost wjq]# [ -z "$a" ] && echo "a等于0" || echo "a不等于0"

  a不等于0

  使用双目运算符进行操作:

  ==|=:被测试的两个字符串是否相等,相同为真,不同为假;

  !=:被测试的两个字符是否不相同,不同为真,相同为假;

  >:被测试的两个字符串在转化为ascll码后的二进制数据;左边是否大于右边,大于为真,小于为      假;

  >:被测试的两个字符串在转化为ascll码后的二进制数据,左边是否小于右边,小于为真,大于为      假;

  例

  ①

  [root@localhost wjq]# a='string'

  [root@localhost wjq]# b='string'

  [root@localhost wjq]# [ "$a" == "$b" ] && echo "a等于b" || echo "a不等于b"

  a等于b

  ②

  [root@localhost wjq]# a='string'

  [root@localhost wjq]# b='str'

  [root@localhost wjq]# [ "$a" != "$b" ] && echo "a不等于b" || echo "a等于b"

  a不等于b

  ③

  [root@localhost wjq]# a='string'

  [root@localhost wjq]# b='str'

  [root@localhost wjq]# [ "$a" > "$b" ] && echo "a大于b" || echo "a小于b"

  a大于b


  文件状态测试运算符:单目测试运算符;

  文件存在性测试,如果测试的文件存在为真,不存在为假;

  -a|-e:

  例

  [root@localhost wjq]# [ -a ./8yu ] && echo "文件存在" || echo "文件不存在"

  文件存在


  文件类型测试(测试存在性)

  -b file:若文件存在并且为块设备,则测试为真;

  -c file:若文件存在并且为字符设备,则测试为真;

  -d file:若文件存在并且为目录设备,则测试为真;

  -f file:若文件存在并且为文本文档,则测试为真;

  -h|-L file:若文件为存在并且为符号链接文件,则测试为真;

  -p file:若文件存在并且为套接字文件,则测试为真;

  例

  [root@localhost wjq]# [ -f ./8yu ] && echo "文件为文本文档" || echo "文件不是文本文档"

  文件为文本文档

  

  文件的访问权限设置:

  -r file:若文件存在并且是用户可读,则测试为真;

  -w file:若文件存在并且是用户可写,则测试为真;

  -x file:若文件存在并且是用户可执行的,则测试为真;

  例

  [root@localhost wjq]# [ -r ./8yu ] && echo "文件可读" || echo "文件不可读"

  文件可读

  [root@localhost wjq]# [ -w ./8yu ] && echo "文件可写" || echo "文件不可写"

  文件可写

  [root@localhost wjq]# [ -x ./8yu ] && echo "文件可执行" || echo "文件不可执行"

  文件可执行

 

  文件特殊权限标识测试:

  -u file:若文件存在并且设置了SUID权限,则测试为真;否则为假;

  -g file:若文件存在并且设置了SGID权限,则测试为真;否则为假;

  -k file:若文件存在并且设置了sticky权限,则测试为真;否则为假;

  例

  [root@localhost wjq]# [ -u ./8yu ] && echo "文件存在SUID权限" || echo "文件不存在SUID权   限"

  文件不存在SUID权限

  [root@localhost wjq]# [ -g ./8yu ] && echo "文件存在SGID权限" || echo "文件不存在SGID权   限"

  文件不存在SGID权限

  [root@localhost wjq]# [ -k ./8yu ] && echo "文件存在STICKY权限" || echo "文件不存在     STICKY权限"

  文件不存在SUID权限


  文件所有权测试:

  -O file:若文件存在并且其属主为当前有效用户,则测试为真;否则为假;

  -G file:若文件存在并且其属组是为当前有效用户,则测试为真;否则为假;

  例

  [root@localhost wjq]# [ -O ./8yu ] && echo "文件存在且其属主为当用户" || echo "文件不存   在"

  文件不存在

  [root@localhost wjq]# ls ./8yu

  ./8yu

  [root@localhost wjq]# ls -l ./8yu

  -rwxrw-r--. 1 wjq wjq 71 3月  27 20:39 ./8yu


  文件内容是否为空:

  -s file:若文件存在并且内容不为空,存在且内容不为空则为真;否则为假;

  

  时间戳测试:

  -N file:被测试文件自从上一次被修改之后,是否被修改过;

  

  逻辑测试运算符:

  ① !:逻辑非(NOT),他放在任何表达式前,是原来为真的表达式变为假,使原来为假的表达式变为真;

  ② -a:逻辑与(AND),他放在两个逻辑表达式之间,仅当两个都为真时,结果才为真;

  例:

  [ -f ./8yu -a -f ./aa ]

  ③ -o:逻辑或(OR),他放在两个逻辑表达式中间,其中只要有一个为真,结果才为真;

  例:

  [ -f ./8yu -o -f ./aa ]

  

  两种表达式等价:

  第一种表达式:

  [ -O /tmp/test ] && [ -s /tmp/test ]

  [ -O /tmp/test ] || [ -s /tmp/test ]

  第二种表达式:

  [ -O /tmp/test -a -s /tmp/test ]

  [ -O /tmp/test -o -s /tmp/test ]

  [ ! -O /tmp/test ]




本文转自 wujunqi1996 51CTO博客,原文链接:http://blog.51cto.com/12480612/1917899
相关文章
|
2天前
|
负载均衡 Linux 应用服务中间件
Linux系统中前后端分离项目部署指南
Linux系统中前后端分离项目部署指南
|
23小时前
|
Ubuntu Linux 编译器
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
|
1天前
|
Linux Windows
虚拟机添加新硬盘之linux系统篇
虚拟机添加新硬盘之linux系统篇
|
1天前
|
监控 安全 Linux
Linux系统入侵排查(三)
本文介绍了Linux系统入侵排查的相关知识。首先解释了进行系统入侵排查的原因,即当企业遭受黑客攻击、系统崩溃或其他安全事件时,需要迅速恢复系统并找出入侵来源。接着,重点讲述了日志入侵排查的重要性,因为日志文件记录了系统的重要活动,可以提供入侵行为的线索。
|
1天前
|
安全 Linux Shell
Linux系统入侵排查(二)
本文介绍了Linux系统入侵排查的步骤,包括检查历史命令记录、可疑端口和进程、开机启动项以及定时任务。作者强调了了解这些技能对于攻防两端的重要性,并提供了相关命令示例,如查看`/root/.bash_history`记录、使用`netstat`分析网络连接、检查`/etc/rc.local`和`/etc/cron.*`目录下的可疑脚本等。此外,还提到了如何查看和管理服务的自启动设置,以判断是否被恶意篡改。文章旨在帮助读者掌握Linux服务器安全维护的基本技巧。
|
2天前
|
缓存 安全 Linux
Linux系统入侵排查(一)
本文探讨了在遭遇黑客入侵或系统异常时进行应急响应和排查的必要性,重点介绍了基于Kali Linux的入侵排查步骤。排查的目标是找出潜在的恶意活动,恢复系统的安全性,并防止未来攻击。总结来说,进行Linux系统入侵排查需要密切关注账号安全,跟踪历史命令,及时识别并消除安全隐患。同时,保持对最新攻击手段和技术的了解,以便更好地防御和应对潜在的网络安全威胁。
|
2天前
|
Linux C语言
【Linux】 拿下 系统 基础文件操作!!!
怎么样,我们的猜测没有问题!!!所以语言层的文件操作函数,本质底层是对系统调用的封装!通过不同标志位的封装来体现w r a+等不同打开类型! 我们在使用文件操作时,一般都要使用语言层的系统调用,来保证代码的可移植性。因为不同系统的系统调用可以会不一样!
12 2