bash shell编程基础1
基本结构
#!/bin/bash
### BEGIN INIT INFO
# Comments come here
### END INIT INFO
#import another file,like:source /lib/lsb/init-functions
###
export "$PATH:" #导出系统变量
word="World" #定义变量
function sayHello(){ #定义函数
echo "Hello $1" #BASH中的绝大多数语句结尾处都没有分号
}
sayHello $word #调用函数
注释
- 单行
行首加“#” - 多行
a,使用输入重定义
:<< \EOF
#要注释的语句块
EOF
b,使用逻辑判断
if [ ]; then
#要注释的语句块
fi
c,在vim中方法是:
:m,ns/^/#/
其中 m 和 n 是行号
调试
- 走读代码
A.代码逻辑
检查是否有遗漏逻辑,或有悖于需求。
B.具体语法
语法方面的东西,变量是否定义,判断语句逻辑是否正确,是否考虑各种异常,错误是否退出,返回正确状态值等。 - 运行
bash -n abc.sh #语法检测
bash -vx abc.sh #运行跟踪
参考http://blog.csdn.net/wklken/article/details/7983054
执行和引用脚本
$./hello.sh #要求执行权限+在子进程进行
$bash hello.sh #无权限要求+在子进程执行
$. hello.sh #无权限要求+在父进程执行
或
$source hello.sh
标准输入/输出/错误输出流
标准输入(stdin)默认为键盘输入,代码0
标准输出(stdout)默认为屏幕输出,代码1
标准错误输出(stderr)默认也是输出到屏幕,代码2
重定向改变输出位置和输入来源:
- >是输出重定向,<是输入重定向,单个符号为覆盖,连续2个为不清除原来的而追加
如
$cat >output_file <input_file
$find /home -name .bashrc >result 2>&1 #标准输出和错误输出至同一文件
$find /home -name .bashrc >& result #同上,简写 - 把错误输出放到shell变量:
$aa=$(cat /tmp/aa 2>&1) - tee重定向
tee命令能将数据同时送往文件与屏幕,如
ls | tee -a result
变量
shell变量分为环境变量和用户变量
-
变量赋值
var="hello world" #赋值"="两边不能有空格,包括空格的值必须用引号双引号:$,’’,``,\等字符改变字面意义
单引号:所有字符保持字面意义
反引号:反引号中的字符串被解释为shell命令
反斜线:转义字符,屏蔽后的字符的特殊意义 -
变量引用
$var #返回变量值
或
${var} #推荐这种,避免变量名称界定问题
${#var} #返回字符串变量长度 -
数值变量
- shell中默认把变量值当作字符串,例如:
age=22
age=${age}+1
echo ${age} #输出结果为22+1,而不是23 - 用let命令使其进行整数运算,例如:
let age=${age}+1 - 也可用declare把变量定义为整型,此后运算,将把age的右值识别为算术表达式或数字。如:
declare -i age=22 - 也可用$(())计算整数表达式,例如:
$result=$((5+2*3))
运算符号:
+:对两个变量做加法
-:对两个变量做减法
*:对两个变量做乘法
/:对两个变量做除法
**:对两个变量做幂运算
%:取模运算
+=:加赋值,第一个变量加第二个变量,再赋值给第一个变量
-=:减赋值
*=:乘赋值
/=:除赋值
%=:取模赋值
bash中没有浮点运算,须通过其他方式实现 - shell中默认把变量值当作字符串,例如:
-
变量类型
- 环境变量,通过export语句将用户路径临时加入到环境变量中,如:
export “$PATH:/home/tld/my_shell.sh” - 局部变量,用local声明,如
local factorial=1
- 环境变量,通过export语句将用户路径临时加入到环境变量中,如: