Linux Bash基础(二)
主要内容:
- 逻辑判断:test关键字
- 选择结构:if-else, case
- 循环结构:while-do, for
逻辑判断
bash不仅可以进行数值运算,通过test关键字还可以进行逻辑判断。
数值大小的判断
例如判断3是否大于2的大小:
test 3 -gt 2; echo $?
0
注意:判断成立,返回0,不成立返回1。
参数 |
含义 |
助记 |
---|---|---|
-gt |
大于 |
greater than |
-lt |
小于 |
less than |
-eq |
等于 |
equal |
-ne |
不等于 |
not equal |
-ge |
大于等于 |
greater equal |
-le |
小于等于 |
less equal |
文本字符串的判断
例如判断两文本是否相等:
test abc = abx; echo $?
1
因为判断不成立,所以返回1。
另外注意:等号的两侧要有空格,否则就变成变量赋值了!
参数 |
含义 |
---|---|
= |
相等 |
!= |
不相等 |
> |
字典顺序大于 |
< |
字典顺序小于 |
文件的判断
例如判断文件是否存在:
test -e a.out; echo $?
参数 |
含义 |
助记 |
---|---|---|
-e |
文件存在 |
exist |
-r |
文件存在&可读 |
readable |
-w |
文件存在&可写 |
writable |
-x |
文件存在&可执行 |
executable |
-f |
文件存在&普通文件 |
file |
-c |
文件存在&字符型特殊文件 |
char |
-b |
文件存在&块型特殊文件 |
block |
-d |
文件存在&为目录 |
directory |
选择结构
if-else
类比C语言中的if else-if else
结构,注意结尾是fi,即if反过来写。
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
例如,demo_if.sh
内容如下:
#!/bin/bash
var=`whoami`
if test $var = "root"
then
echo "You are root"
else
echo "$var, You are not root"
fi
case
类比C语言中的switch-case
结构,注意,break
被;;
取代,结尾是esac,即case反过来写。
case 值 in
模式1)
command1
command2
;;
模式2)
command1
command2
;;
esac
例如,demo_case.sh
代码如下:
#!/bin/bash
var=`whoami`
echo "You are $var"
case $var in
root)
echo "You are God."
;;
deeplearning)
echo "You are a happy user."
;;
*)
echo "You are the others."
;;
esac
注意:文本标签除了是一串具体的文本,还可以包含通配符,如;
通配符 |
含义 |
文本标签的例子 |
通过的条件文本 |
---|---|---|---|
***** |
任意文本 |
*) |
Xyz, 123, ... |
? |
任意一个字符 |
a?c) |
abc, axc, ... |
[] |
范围内一个字符 |
[1-5] [b-d]) |
2b, 3d, ... |
循环结构
while
类比C语言中的while-do
结构,注意以done结尾。
例如demo_while.sh
代码如下(注意符号+
之前有一个空格!):
#!/bin/bash
now=`date +'%Y%m%d%H%M'`
deadline=`date --date='30 second' +'%Y%m%d%H%M'`
while test $now -lt $deadline
do
date
echo "not yet"
sleep 10
now=`date +'%Y%m%d%H%M'`
done
echo "now, deadline reached"
2019年 11月 11日 星期一 15:07:31 CST
not yet
2019年 11月 11日 星期一 15:07:41 CST
not yet
2019年 11月 11日 星期一 15:07:51 CST
not yet
now, deadline reached
for
类比C语言中的for
结构,注意也是以done结尾。
例如demo_for.sh
代码如下:
#!/bin/bash
for var in `ls log*`
do
rm $var
done
该脚本的功能是查找本目录中以“log”开头的文件,并将其依次删除。
另外,结合seq关键字,可以控制循环次数,比如:
seq 1 2 10
1
3
5
7
9
应用举例
- 高斯求和,计算1到100所有整数的加和:
#!/bin/bash
total=0
for number in `seq 1 1 100`
do
total=$(($total+$number))
done
echo $total
5050
也可以用while-do结构:
#!/bin/bash
total=0
num=1
while :
do
if test $num -gt 100
then
break
fi
total=$(($total+$num))
num=$(($num+1))
done
echo $total
- 计算1到100所有不被3整除的数的和,使用**continue语句**:
#!/bin/bash
total=0
for num in `seq 1 1 100`
do
if test $((${num}%3)) -eq 0
then
continue
fi
total=$(($total+$num))
done
echo $total
3367
- 在Entity Framework中使用存储过程(一):实现存储过程的自动映射
- 在Entity Framework中使用存储过程(二):具有继承关系实体的存储过程如何定义?
- 表单控件的副产品——查询控件
- 表单控件续(1)——应用接口来简化和分散代码
- 通过自定义配置实现插件式设计
- 让IoC动态解析自定义配置(提供基于Unity的实现)
- 如何让ASP.NET默认的资源编程方式支持非.ResX资源存储
- 在VS中通过建立依赖关系使文件结构更清晰
- 一个关于ConfigurationManager.GetSecion方法的小问题
- 追踪记录每笔业务操作数据改变的利器——SQLCDC
- 一个完整的用于追踪数据改变的解决方案
- C# 4.0新特性-"协变"与"逆变"以及背后的编程思想
- 通过内存分析工具来证明字符串驻留机制
- 如果在BackgroundWorker运行过程中关闭窗体…
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- js(javascript)取得当前时间小时,分钟,秒 以及毫秒
- js(javascript) onclick与ondblclick 单击与双击事件
- unity5.x C# 获取屏幕宽度 设置不受重力影响
- unity5.x Translate平移移动 以及GetComponent获取组件
- php 计时器microtime 以及去掉数组重复值array_unique
- php 字符串打散为数组,用逗号分隔出数组
- php in_array 判断数组中是否存在此元素
- php str_replace 字符串替换
- strstr和strcchr查找字符串和区别
- php获取当前操作系统类型 PHP_OS
- php is_dir 判断是否存在这目录
- php strtoupper 和 array_change_key_case 字符串转大写,小写
- php register_shutdown_function响应error 配合error_get_last 捕获错误
- C# 实现Winform全屏后不遮挡任务栏,显示任务栏
- [TP5填坑]关于助手函数input一不小心取不到get值的解决办法