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

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

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

let arg...

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

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

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

((算术表达式))

例如

[[email protected] wjq]# let "a=2*3"

[[email protected] wjq]# echo $a

6

[[email protected] wjq]# (("a=3*3"))

[[email protected] 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命令运算为:

[[email protected] wjq]# b=5

[[email protected] wjq]# let "a+=b"

[[email protected] wjq]# echo $a

14

[[email protected] wjq]#

特殊增强型运算:

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

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

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

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

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

[[email protected] wjq]# a=4

[[email protected] wjq]# b=5

[[email protected] wjq]# let "a++"

[[email protected] wjq]# let "a+=b"

[[email protected] wjq]# echo $a

10

算术运算方法:

① let VAR=算术表达式

#let “B=5+4”

#echo $B

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

变量:存储数据的容器

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

② VAR=$[算术表达式]

[[email protected] wjq]# a=$[a*b]

[[email protected] wjq]# echo $a

50

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

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

[[email protected] wjq]# a=$((a*b))

[[email protected] wjq]# echo $a

250

④ exper ARGU1 ARGU2 ARGU3

ARGU1和ARGU3 必须是数值

ARGU2是运算符

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

[[email protected] 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,左边的是否小于等于右边的;

[[email protected] wjq]# [ "$a" -eq 0 ] && echo "a等于0" || echo "a不等于0"

a不等于0

字符串测试运算符:

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

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

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

[[email protected] wjq]# a=‘string‘

[[email protected] wjq]# [ -z "$a" ] && echo "a等于0" || echo "a不等于0"

a不等于0

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

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

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

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

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

[[email protected] wjq]# a=‘string‘

[[email protected] wjq]# b=‘string‘

[[email protected] wjq]# [ "$a" == "$b" ] && echo "a等于b" || echo "a不等于b"

a等于b

[[email protected] wjq]# a=‘string‘

[[email protected] wjq]# b=‘str‘

[[email protected] wjq]# [ "$a" != "$b" ] && echo "a不等于b" || echo "a等于b"

a不等于b

[[email protected] wjq]# a=‘string‘

[[email protected] wjq]# b=‘str‘

[[email protected] wjq]# [ "$a" > "$b" ] && echo "a大于b" || echo "a小于b"

a大于b

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

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

-a|-e:

[[email protected] wjq]# [ -a ./8yu ] && echo "文件存在" || echo "文件不存在"

文件存在

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

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

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

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

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

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

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

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

文件为文本文档

文件的访问权限设置:

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

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

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

[[email protected] wjq]# [ -r ./8yu ] && echo "文件可读" || echo "文件不可读"

文件可读

[[email protected] wjq]# [ -w ./8yu ] && echo "文件可写" || echo "文件不可写"

文件可写

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

文件可执行

文件特殊权限标识测试:

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

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

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

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

文件不存在SUID权限

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

文件不存在SGID权限

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

文件不存在SUID权限

文件所有权测试:

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

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

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

文件不存在

[[email protected] wjq]# ls ./8yu

./8yu

[[email protected] 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 ]

时间: 2024-10-17 07:45:12

Linux系统Bash(Shell)基础知识(3)的相关文章

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(1)

在日常交际英语中,Shell可以翻译成壳,大多指能够对内部核心起到保护作用的一种装置或结构.在计算机科学中,shell其实是指:为操作者提供的.能够通过系统调用或库调用使用整个计算机资源的访问接口. 它既是一种命令解析器又是一种程序设计语言.作为命令解析器,它可以解释和执行用户输入的命令,也可以自动地解释和执行预先编写好并保存在某个文本文件中的一系列的命令:作为程序设计语言,shell特别定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和条件分支,让我们可以像使用高级语言

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(3)

五.注释 在非交互shell中或交互式shell中,内置命令shopt的选项interactive_comments被开启.以"#"开始的词使得这个词所在这一行上所有其他的剩余字符都被忽略(或称注释).交互式shell不用开启interactive_comments选项也不支持注释.interactive_comments选项在交互式shell中是默认启用的.注释是编写程序时,写程序的人给一个语句.程序段.函数等的解释或提示,能提高程序代码的可读性,以便于以后的参考.修改.后来,在应用

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(2)

三.命令历史bash从Korn Shell和C Shell中吸收了很多的精华,其中之一正式为已经执行过的命令保存一个缓存副本的特性,我们称之为"命令历史"功能.我们为什么要使用命令历史功能呢?每个用户登录成功之后,尤其是使用bash这样的文件接口登录之后,所有的操作都是由执行命令来实现的,那么就不可避免的会出现重复执行某个命令的情况,如果每个命令都依靠键入的方式来输入的话,固然没有问题,但是效率不高而且也是浪费时间的"可耻"行为,命令历史刚好给我们提供了解决这种问题

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(4)

九.展开 命令行的展开是在拆分成词之后进行的.有七种类型的展开:花括号展开,波浪线展开,参数和变量展开,命令替换,算术展开,分行成词,路径展开. 展开的顺序是:花括号展开,波浪线展开,参数和变量展开,命令替换,算术展开,分行成词,路径展开,按照从左到右的顺序展开. 在系统上还有一种可用的额外的展开:进程替换. 只有花括号展开,分行成词和路径展开在展开前后的词数会发生改变:其他展开总是将一个词展开为一个词. 唯一的例外是上面提到的"[email protected]"和"${n

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(5)

十一.函数  shell函数就是按照上面SHELL GRAMMAR的描述定义的保存着一系列等待稍后执行的命令.当shell函数名被当做一个简单命令名使用时,被这个函数名关联的一系列命令都被执行.函数在当前shell的上下文环境中被执行:不会创建新的进程来解释它们(这与shell脚本的执行形成了对比).当执行函数时,函数的参数成为执行过程中的位置参数.特殊参数#被更新以反映这个变化.特殊参数0不会改变.函数执行时,FUNCNAME变量的第一个元素被设置为函数的名称.  shell执行环境的所有其他

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(6)

SHELL BUILTIN COMMANDS  除非另外说明,内置命令如果接受由-引导的选项,那么它也接受--,来表示选项的结束.内置命令:,true,false和test不接受选项并且尤其不处理--引导的选项.内置命令exit,logout,break,continue,let和shift接受和处理以-开头的参数不需要以--开头的.其他接受参数但是不能接受特定选项的内置命令解释以-作为无效选项开头的参数并且需要--来阻止这样的解释.    : [arguments]      没有效果:这个命

linux 学习随笔-shell基础知识

1:用户的shell历史命令保存在home/username/.bash_history中 #!!  执行用户的上一条命令 #!pw  执行命令历史中最近一次以pw开头的命令 2:'*'来匹配零或多个字符 '?’匹配一个字符 #ls -d Day* 列出Day开头,后面匹配所有字符的目录 #ls -d Day? 列出Day开头,后面匹配一个字符的目录 3:>> 在文件中追加重定向 > 在文件中重定向 4:| 管道符 #cat /etc/passwd|wc -l cat /etc/pass

【Linux系列】【基础版】第三章 Shell基础知识

3. Shell基础知识     3.1 Shell的由来         3.1.1 Bourne Agin Shell         3.1.2 其他的shell, 有 zsh, ksh等     3.2 查看有没有shell         3.2.1 yum list | grep zsh         3.2.2 ls /root/.bash_history         3.2.3 echo $HISTSIZE -> vi /etc/profile 修改HISTSIZE的值 -

Bash的基础知识man手册

Bash的基础知识man手册 由于基于Android类设备的渗透测试都是通过各类终端实现.所以掌握Shell相关操作就显得尤为重要.Bash是一个为GNU计划编写的Unix Shell本文选自基于Android设备的Kali Linux渗透测试教程. 它是许多Linux平台内定Shell,还有许多传统UNIX上用的Shell,如tcsh.csh.ash.bsh.ksh等.Bash是大多数Linux系统上默认的Shell,本章将介绍Bash的基础知识. 2.1  man手册 Linux man中的

Bash编程基础知识学习第一节

Bash编程基础知识学习 一.bash的由来 1 .什么是Bash 什么是Shell Bash 是GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell. Shell 是*nix提供给用户使用的界面.一个操作系统的底层是独立运行的, 用户界面和底层分开,可以最大限度的保证系统稳定.Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户. Bash Shell 一般不需要自己安装,在安装发行版的同时都会安装好. Shell的存在是和登陆相关的