好象现在不流行用shell编写脚本了,这些笔记可能显得有些过时,放在这儿供自己参考吧。
同时,尽可能把一些细节列出来,供大家当参考手册来查吧。 可以理解为用shell这种脚本语言进行编程,编写好的程序放在文件里,用bash 来解释执行这个程序。
bash编程学习笔记(1)
好象现在不流行用shell编写脚本了,这些笔记可能显得有些过时,放在这儿供自己参考吧。
同时,尽可能把一些细节列出来,供大家当参考手册来查吧。
可以理解为用shell这种脚本语言进行编程,编写好的程序放在文件里,用bash 来解释执行这个程序。
下面概要介绍一下shell编程。
编写shell脚本程序的要求:
建立脚本
程序第一行需用#!指明解释程序
通过bash filename来运行filename程序。chmod +x filename将程序改为可执行,则可用./filename运行此脚本。
shell脚本语言作为一种编程语言,与其它计算机高级语言一样有一些共性:
注释
以#开头的至行尾的信息(当#出现在引号内、正则式内、比较式内等不为注释符的情况除外)
变量
变量名是字符串,赋值如下: 变量名=值
对变量的使用或取出变量值,在变量名前加$符号,有时为了将变量名与其它字符区别开来,可以用${变量名}的方式。对变量的值的引用,叫变量替换(variable substitution)。变量只有在声明、赋值、unset、export或表示signal时,不用$作前缀。
还有一类变量叫环境变量,与shell变量的用法一致,用export命令可以将shell变量改为环境变量,不清楚反向如何操作。
变量声明后尚未赋值时,值为null.
当$a为一含有空格的字符串时,echo $a与echo “$a”的结果可能不一致,前者会压缩多余的连续空格。
bash变量不分类型,当要对其进行四则运算时,只要求变量的值只含有阿拉伯数字。
命令
相当于一般语言里的基本函数,常用的shell命令参看附表。
shell脚本语言可以自定义函数。
流程控制
1)if语句
if [ ... ]; then
...
elif [ ... ]; then
...
else
...
fi
其中用” [ ] ”表示条件测试,注意方括号周围的空格。
2)case语句
case表达式可以用来匹配一个给定的字符串,而不是数字。
case ... in
...) do something here ;;
...
*) otherwise do something here;;
esac
3)while语句
while ...; do
....
done
4)for语句
for var in ....; do
....
done
输入输出
命令间交互
1)管道(|)
将一个命令的输出当作另一个命令的输入
2)重定向(>或>>)
>:将一个命令的输出写到一个文件并覆盖旧的内容
>>:将一个命令的输出追加到一个文件的尾部
3)反引号(`)
可以将以反引号括起来的命令的输出作为另一个命令的命令行参数
select表达式
select var in ... ; do
break
done
需要说明的是,此处用“语句”,只是为了表达语言的共性,对shell脚本来说应该叫表达式比较准确。
附表: