Bash 脚本语法
每次学了忘,忘了学,怎么记不住,因为长时间不用了
Bash 流程控制
循环
for循环
for item in $list
do
echo $item
done
另一种与C语言类似的写法
for((i=; i<; i++))
do
echo $i
done
双括号是个非常好的东西!
还有一种
for i in $(seq 5)do
done
seq还有第三个参数表示step
更叼的
for i in {..}
do
done
还可以指定{1..10..step}
条件分支
if [ -f $file_path ]; then
#do_something
fi
if 后面跟条件如为0则进入then分支,这个和C/C++不同,因为bash主要用来根据一些命令的成功与否进行进一步的操作,命令执行成功则返回0,失败则非零
一般在if后面总是跟个中括号,但它不是bash语法的一部分,[ 也是一个命令,是bash的内建命令,它的参数以]结尾,与命令test功能一致
条件取反
加!即可
类似C中的Switch语句
case "$VAR" in
itemA) cmd;;
itemB) cmd;;
*) cmd;;
esac
item可以使用通配符
常用文件检测
- -a file :file 存在
- -d file :file存在并是一个目录
- -e file :file 存在,同- a
- -f file :file 存在并且是一个常规的文件(不是目录或者其他特殊类型文件)
- -r file :有读的权限
- -s file :文件存在且不为空
- -w file :有写的权限
- -x file :有执行的权限,或者对于目录有search的权限
- -N file :在上次读取后,文件有改动
- -O file :own所属的文件
- -G file :group所属的文件
- file1 -nt file2 :file1 比 file2 更新,以最后更新时间为准
- file1 -ot file2 :file1 比 file2 更旧 ,以最后更新时间为准
常用整数判断
- -eq 等于 if [ "$a" -eq "$b" ]
- -ne 不等于 if [ "$a" -ne "$b" ]
- -gt 大于 if [ "$a" -gt "$b" ]
- -ge 大于等于 if [ "$a" -ge "$b" ]
- -lt 小于 if [ "$a" -lt "$b" ]
- -le 小于等于 if [ "$a" -le "$b" ]
- 另外可以使用(( ))在双括号内进行C风格的比较
numa=1
numb=2
if (($numa > $numb)); then
echo "$numa > $numb"
else
echo "$numa < $numb"
fi
常用字符判断
= 等于 if [ "$a" = "$b" ]
== 等于if [ "$a" == "$b" ] 与=等价.
<小于, 按照ASCII字符进行排序
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ] 注意"<"使用在[ ]结构中的时候需要被转义.
>大于, 按照ASCII字符进行排序
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ] 注意">"使用在[ ]结构中的时候需要被转义.
-z 字符串为"null", 意思就是字符串长度为零
-n 字符串不为"null".
S=a if [ "$S" == "b" ];then
echo "char is b"
elif [ "$S" == "a" ];then
echo "char is a"
else
echo "char is $S"
fi
尽量使用if与then在一行的方式,否则比较容易出错。
[]中使用条件与/或需要使用-o -a 进行连接不能用&&,||,但是[[]]可以,所以还是用[[]]吧,计算上也是使用(())来的方便
函数
sayhello() {
if [ $# -ge 1 ];then
echo "hello $1!"
else
echo "hello!"
fi
}
sayhello 'my friends'
函数调用时没有括号
参数参数通过dollar1,dollar2...获取
参考:
http://www.21andy.com/manual/advanced-bash-scripting-guide/comparison-ops.html
Bash 脚本语法的更多相关文章
- linux下bash脚本语法
1.shell中的变量定义和引用(1)变量定义和初始化.shell是弱类型语言(语言中的变量如果有明确的类型则属于强类型语言:变量没有明确类型就是弱类型语言),和C语言不同.在shell编程中定义变量 ...
- Linux bash shell脚本语法入门
1.基础 #!/bin/bash //bash脚本第一句都是这个,他会让系统指定以bash来解释这个脚本 # //shell脚本注释符号 2.变量和使用 HOME= ...
- (转)Linux bash shell脚本语法入门
http://www.linuxsky.org/doc/newbie/201004/389.html 1.基础 #!/bin/bash //bash脚本第一句都是这个,他会让系统指定以bash来解释这 ...
- Bash 脚本编程语言中的美学与哲学
我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨 Bash 脚本语言中的美学与哲学. 这不是一篇 Bash 脚本编程的教程,但是却能让人更加深入地了解 Bash ...
- Bash脚本15分钟进阶指导
首先声明这是网上摘来的.这里的技术技巧最初是来自谷歌的“Testing on the Toilet” (TOTT).这里是一个修订和扩增版本. 脚本安全 我的所有bash脚本都以下面几句为开场白: # ...
- 一个很不错的bash脚本编写教程
转自 http://blog.chinaunix.net/uid-20328094-id-95121.html 一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂! 建立一个脚本 Lin ...
- Bash脚本15分钟进阶教程
转载: Bash脚本15分钟进阶教程 这里的技术技巧最初是来自谷歌的"Testing on the Toilet" (TOTT).这里是一个修订和扩增版本. 脚本安全 我的所有ba ...
- 脚本命令高级Bash脚本编程指南(31):数学计算命令
题记:写这篇博客要主是加深自己对脚本命令的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 高等Bash脚本编程指南(31):数学盘算命令 成于坚持,败于止步 操作数字 factor ...
- shell脚本语法基础汇总
shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...
随机推荐
- vmware vSphere克隆与快照技术
通过Web vCenter我们可以很容易的对虚拟机进行管理,通过克隆技术或创建模板,我们可以迅速的创建虚拟机,我们也可以通过快照技术去捕获虚拟机的一些状态,比如说虚拟机的内存.设置或者虚拟磁盘的情况等 ...
- 18、OpenCV Python 简单实现一个图片生成(类似抖音生成字母人像)
__author__ = "WSX" import cv2 as cv import numpy as np def local_threshold(img): #局部阈值 gra ...
- 题解 P1632 点的移动
P1632 点的移动 题目描述 平面上有N个整数坐标点.如果将点(x0,y0)移动到(x1,y1),则需要的代价为|x0-x1|+|y0-y1|.求使得K(K=1,-,N)个点在同一位置上最少需要的代 ...
- 微信发送模版消息,PHP代码简单案例
function http_request($url,$data=array()){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); c ...
- nginx关闭默认站点/空主机头(禁止IP直接访问、防止域名恶意解析)
监控时做了负载均衡,所以只能让nginx指定域名访问,那我们就可以防止因为域名不对跳到默认的页面去. curl -I -H “host:域名” --include https://19 ...
- redis中使用lua脚本
lua脚本 Lua是一个高效的轻量级脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能 使用脚本的好处 1.减少网络开销,在Lua脚 ...
- JAVA基础——Java 中必须了解的常用类
Java中必须了解的常用类 一.包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的,比如基本类型不 ...
- Domoticz 中接入斐讯 M1 空气质量检测仪
前言 M1 是翻车讯出的一款空气质量检测仪,如今斐讯的服务器经常连不上了,M1 不动动手接到 Domoticz 怕是变成摆设了.教程参考了这里和官方的 Using Python plugins. 步骤 ...
- python学习,day2:python字符串和二进制之间的互换
在python3中,byte二进制和striing字符串之间不能直接操作,需要进行编码和解码才行.下面是个例子 msg = '我爱北京天安门' print(msg) print(msg.encode( ...
- A计划(三维dfs)
可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚,告招天下 ...