..

【翻译】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