【翻译】bash备忘录
原文地址: http://www.linux-sxs.org/programming/bashcheat.html
本文不会教你如何使用bash,但是他会让你快速的知道bash是什么,让你知道什么是bash脚本。
基础
bash脚本都需要告诉操作系统,当前使用哪一种解释器来执行这个脚本。写在脚本的第一行,如下:
#!/bin/bash
//或者
#!/usr/bin/env bash
#!/bin/node
你必须让脚本拥有可执行权限
#所有人都拥有执行权
chmod +x filname
# 当前用户拥有执行权限
chmod u+x filename
变量
bash的变量没有类型,定义方法如下:
varname=value
n=10
在变量名字前面使用 $ 来使用这个变量,例如:
n=10
echo $n
命令行参数中的变量通常使用$N来访问,$#表示命令行参数的个数(不包括命令本身)
command var1 var2 var3 …. varX
$# 表示参数个数
$@ 表示所有参数(不包括命令本身)
$0 表示 command 命令本身
$1 表示var1
$2 表示var2
依次类推。。。
引用符号
双引号:“var"被shell理解为是一个普通的字符串参数,你需要特别注意其中的转义字符。
单引号: ‘var’被shell理解为一个单纯的字符,shell会忽略其中的转义字符,不会转义他们。
反引号: var
被shell理解为一条需要执行的bash命令,通过会用在子名字中,例如:
echo `pwd`
逻辑判断
数字比较
test expression 或者 [ expression ]
int1 -eq int2 如果int1等于int2,返回true int1 -ge int2 如果int1大于或者等于int2,返回true int1 -gt int2 如果int1大于int2,返回true int1 -le int2 如果int1小于或者等于int2,返回true int1 -lt int2 如果int1小于int2, 返回true int1 -ne int2 如果int1不等于int2, 返回true
字符串比较
str1 = str2 如果str1等于str2, 返回true str1 != str2 如果str1不等于str2, 返回true str 如果str不为null, 返回true -n str 如果str不为空,并且长度大于0, 返回true -z str 如果str是一个空字符串,返回true
文件比较
-d filename 如果filename是一个文件夹,返回true -f filename 如果filename是一个文件或者文件夹,返回true -r filename 如果filename是一个可读额文件,返回true -s filename 如果filename是一个有内容的文件,返回true -w filename 如果filename是一个可写的文件,返回true -x filename 如果filename是一个可执行的文件,返回true
表达式比较
!expression 如果表达式expression是false, 返回true
expr1 -a expr2 如果expr1和expr2都是true, 返回true
expr1 -o expr2 如果expr1和expr2有一个是true, 返回true
If…then
if [ expression ]
then
commands
fi
If..then…else
if [ expression ]
then
commands
else
commands
f
If..then…else If…else
if [ expression ]
then
commands
elif [ expression2 ]
then
commands
else
commands
fi
Case select
case string1 in
str1)
commands;;
str2)
commands;;
*)
commands;;
esac
string1 依次和str1,str2比较,如果满足条,那么执行对应的shell命令,知道遇到两个分号 ;; 为止,如果不满足任何条件,那么执行*对应的shell命令。
迭代 (Loops)
for var1 in list
do
commands
done
until [ expression ]
do
commands
done
函数
创建函数
fx(){
echo 'hello world'
}
函数调用不要使用括号包裹参数
#错误
fx(arg1,arg2)
#正确
fx arg1 arg2