bash编程2
bash基础编程
前言:条件测试语法有两种书写模式,一种时[expression] ,另外一种是[[exprssion]] ,为了在书写条件测试的过程中,不让大家将两种格式互相混淆,那么在这里只讲一种格式,也就是第一种格式[]。因为第一种格式在书写过程中基本不会出错,而第二种格式经常会写错,且第一种格式在很多服务的启动脚本中经常看到,因此应用广。 有兴趣可以看看《shell脚本编辑大全》
条件测试的状态返回i值和书写格式
执行命令,利用状态返回值来判断
0 :成功
1-255:失败
测试表达式
test expaession
[ expression ] 常用
[[ expression ]]
bash的测试类型
数值测试
字符串测试
文件测试
数值测试:数值比较
-eq : 是否等于 [$numl -eq $num2] ===euqual
-ne : 是否不等于[$numl -ne $num2] ==== no euqual
-gt : 是否大于 [$numl -gt $numl2]====greater
-ge : 是否大于等于[$numl -ge $numl2] ===greater euqual
-lt : 是否小于 [$numl1 -lt $numl2]====less than
-le : 是否小于等于 [$numl1 -le $numl2]
字符串测试:字符比较
== :是否等于
> : 是否大于
< : 是否小于
!= :是否不等于
=~左侧字符串是否能够被右侧的pattern所在区配
-z "string" : 判断指定的字符串是否为空,空则为真,不空则为假
-n "string" : 判断指定的字符串是否为不空,不空则为真,空为假
注意:
(1) 字符串要加引号
(2) 在做字符串的比较时候,格式如下:
if [" $VARIABLE" = = "$SVARIABLE" -a "$SVARIBLE" = = "CPU" ] ;then 需要在运算符号两边有空格,并且使用双引号将字符串包裹起来,这样即使是变量也可以替换。
文件测试
存在性测试
-a file
-e file
文件的存在性测试,存在为真,不存在文假
文件类型测试
-b file :是否存在并且为块设备文件
-c file :是否存在并且为字符设备文件
-d file :是否存在并且为目录文件
-f file :是否存在并且为普通文件
-h/l file :是否存在并且为符号链接文件
-p file :是否存在并且为为管道文件
-s file :是否存在并且为套接字文件
文件权限测试
-r file :是否存在并且为当前用户可读
-w file :是否存在并且为当前用户可写
-x file : 是否存在并且为当前用户可执行
特殊权限测试
-u file :是否存在并且为拥有SUID 权限
-g file : 是否存在并且为拥有GUID权限
-k file : 是否存在并且为拥有Stiicky权限
文件是否有内容
-s file : 是否存在并且有内容
文件是否为空,为空则为真
-z $VARIALE
文间的时间差测试
-N file : 文件自从上此被读取后是否被修改过
从属关系测试
-O file :当前用户是否为文件的属主
-G file : 当前用户是否属于文件的属组
双目测试
file -ef file2 :是否为同一件文件系统上的指向同一iNode的硬链接
file -nt flie2:file1 是否新于file2
file -ot file2:file1 是否旧于file2
组合条件测试
逻辑运算
第一种方式
COMMAND1 $$ COMMAND2
COMMAND1 || COMMAND2
! COMMAND
[-O file ] & & [-r file]
第二种方式
[expression -a expression] : 与运算
[expession -O expression] : 或运算
! expression
例如: [- O file -a -x file ]
脚本的状态返回值
1 默认是脚本执行的最后一条命令的返回值
2 自定义状态退出状态码
exit [n] : n为自己指定的状态码
注意:shell 进程遇到exit时候,会立即终止,
整个脚本执行结束
向脚本传递参数
位置参数变量
在脚本文件中的引用方式:
$1 , $2........表示给脚本传递的第一个参数和第二个位置参数
到了两位数的时候用${10},${11} 因为$11会产生歧义。
轮替 shift [n] :位置参数轮替
特殊变量
$o :脚本文件路径名称本身
$# :保存了脚本参数的个数
$* :所有参数
$@ :所有参数
过程式编程的代码执行顺序
顺序执行: 逐条执行
选择执行: 代码存在一个或多个分支,只执行其中一个
代码有一个分支: 条件满足时才会执行
两个或以上的分支:只会执行其中一个满足条件的分支
循环执行 : 代码片段(循环体)要执行0,1 或多个来回
选择执行: 单分支的if语句
bash编程2的更多相关文章
- bash编程之多分支if 语句及for循环
第十七章.bash编程之多分支if 语句及for循环 if语句三种格式 多分支if语句练习 for循环 17.1.if语句的三种格式 单分支if语句 if condition;then 条件为真执行的 ...
- bash编程总结
bash应该是目前Linux上最流行的shell脚本解释程序了(还有个shell叫dash,我太讨厌这个东东了.),只要你在linux上工作,并且希望自己能够工作得更愉悦,那么你应该熟悉最基本的bas ...
- Linux中bash编程
bash编程也叫shell编程 预定义变量 $? 最后一次执行的命令的返回状态.如果这个变量的值为0,证明上一个命令正确的执行:如果这个变量返回的值非0(具体是那个数,有命令自己来决定 ...
- bash编程基础
bash变量 变量命名: 1.不能使用程序中的关键字(保留字) 2.只能使用数字.字母和下划线,且不能以数字开头 3.要见名知义 变量类型: 数值型:精确数值(整数),近似数值(浮点型) 字符型:ch ...
- bash编程之循环控制:
bash编程之循环控制: for varName in LIST; do 循环体 done while CONDITION; do 循环体 done until CONDITION; do 循 ...
- [shell] Bash编程总结
由于工作需要,之前的几个月写了一些Bash脚本,主要完成自动测试.打包.安装包等.虽然相比C++编程,要简单.傻瓜,但其在类Unix系统中可以大大提高工作的效率.所以在此对脚本编程过程中一些注意事项进 ...
- bash编程的信号捕获:
bash编程的信号捕获: kill -l KILL无法捕捉: trap 'COMMAND' SIGNAL, 信号捕捉用于:在中途中止时做一些清理操作. 一. trap捕捉到信号之后,可以 ...
- 怎样用 Bash 编程:逻辑操作符和 shell 扩展
学习逻辑操作符和 shell 扩展,本文是三篇 Bash 编程系列的第二篇. Bash 是一种强大的编程语言,完美契合命令行和 shell 脚本.本系列(三篇文章,基于我的 三集 Linux 自学课程 ...
- 怎样用 Bash 编程:语法和工具
让我们通过本系列文章来学习基本的 Bash 编程语法和工具,以及如何使用变量和控制运算符,这是三篇中的第一篇. Shell 是操作系统的命令解释器,其中 Bash 是我最喜欢的.每当用户或者系统管理员 ...
- Linux Bash编程
在Linux系统介绍中,介绍了shell的多个版本,现在的Linux发行版基本都默认使用bash(Bourne Again shell),兼容Bourne shell (sh),本文将简要介绍Bash ...
随机推荐
- Dbshop v1.3任意用户密码重置漏洞
0x00 前言 年也过的差不多了,各自也都回到岗位忙碌起来了,新的一年祝大家诸事顺利,洞洞高危!好了进入正题 0x01 漏洞简介 本次主要写个简单的逻辑漏洞!然后抛个Message 内置高危. 1.找 ...
- Django 中跨 app 创建外键、多对多引用的方法
问题描述 我的 Django 项目中有两个 app. 在 PersonalCenter app下的 models.py 下定义了一个 Footprint 类: 在 LoginAndRegister a ...
- PTA基础编程题目集6-3简单求和 (函数题)
6-3 简单求和 (10 分) 本题要求实现一个函数,求给定的N个整数的和. 函数接口定义: int Sum(int List[],int N) 其中给定整数存放在数组List[]中,正整数N是数组元 ...
- hadoop伪分布式组件安装
一.版本建议 Centos V7.5 Java V1.8 Hadoop V2.7.6 Hive V2.3.3 Mysql V5.7 Spark V2.3 Scala V2.12.6 Flume V1. ...
- C语言中while语句里使用scanf的技巧
今天友人和我讨论了一段代码,是HDU的OJ上一道题目的解,代码如下 #include<stdio.h> { int a,b; while(~scanf("%d%d",& ...
- Swift里performSelector方法的替代
最近在回答StackOverflow的问题时,发现performSelector方法在Swift被去掉,Apple的注释是这个方法被去掉是因为不安全: NOTE The performSelector ...
- 20155301 2016-2017-2 《Java程序设计》第4周学习总结
20155301 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 1.关键词extends,表示SwordsMan会扩充Role的行为,然后再扩充Role原本 ...
- SupperSocket深入浅出(二)
如果还没有看SuperStock深入浅出(一) ,请先看 这一章,主要说下命令是如果运行的.刚开始的时候会发现拷别人的代码命令是可以运行的,在修改的过程中突然发现命令无效了? 这里什么原因?,我先把代 ...
- Linux下MySql变量修改遇到的问题记录
一.问题记录: 项目上需要使用mysql的过程来自动化构建一批数据,但是调用的时候总是报找不到表或者过程 二.排查过程: (1)首先终端连接mysql后发现,无论表还是过程在数据库中都是存在的,排除了 ...
- DIRECT3D状态详解
Microsoft® Direct3D®设备是一个状态机.应用程序设置光照.渲染和变换模块的状态,然后在渲染时传递数据给它们. 本节描述图形流水线用到的所有不同类型的状态. 渲染状态 取样器状态 纹理 ...