Bash Shell编程初学基础篇之一
说明: 本文仅供初学Linux Bash shell学员参考学习,大神们如有兴趣请批评指正!!!
相信对于很多Linux初学者或者仅仅是听说Linux还没有接触过的同学会有一种神秘感或者不敢碰触的感觉,今天就帮大家揭开它的神秘面纱,其实并没有那么深不可测,只要你敢,你有决心去下工夫看完以下内容(是时候该逼自己下决心去做一些事情了!!!)。废话少说,浪费大家宝贵时间。
概述: 以下主要从Bash脚本的格式,变量,基本运算语法和实例来讲解;每个实例都保证运行测试通过,然后截屏与大家分享;大家通过一些简单的实例相信会很快上手,不要灰心,要相信自己;人和人之间的差距就在于用心去做。
基本内容:
-
Shell脚本的基本格式:
-
用vim等编辑器新建一个bash.sh的文本文件,第一行以#!/bin/bash开头即可。
-
一个规范的Shell的基本格式如下:
#!/bin/bash # Description :test # Version 0.0.1 # Author:zgq # Date :time
第一行是标准格式,我们在此处仅针对Bash来说,必须这样写,任何一门语言都有其规范;第二行Description简单描述一下Shell的基本功能,第三行Version版本信息,第四行Author:作者信息,第五行Date:日期时间。除了第一行,其他以#开头的行均为注释信息,会被解释器忽略。
希望大家在以后实现脚本功能之后将此信息补充完整,存在既有其将来被用到的一天。
实例:新建一个脚本/tmp/test.sh实现如下功能:
1) 新建一个用户magedu,
2)创建目录/tmp/hellobash
3)复制/etc/rc.d/init.d/functions至/tmp/hellobash中
大家动手新建这个一个简单的脚本,熟悉一下其基本的写法规范。其实Shell脚本是一个过程式编程语言,把常用的Shell命令按顺序罗列起来就是一个脚本。
脚本写完了,我们怎么去执行它呢?
首先用ll命令看一下此脚本是没有执行权限的,用chmod +x /tmp/test.sh
赋予执行权限;然后用bash –n test.sh 此功能是语法测试,如果没有任何结果则是最好的结果,bash –x test.sh 单步执行显示其运行过程结果;
或者我们直接bash test.sh 执行脚本。
-
变量概述:
Bash变量名称命令规则:
a)只能包含字母、数字和下划线,并且不能以数字开头;
b)不能与系统中环境变量重名
c)见名知意
Bash变量赋值和撤销:
Bash属于弱类型语言,任何变量无需事先声明,可直接使用,值默认都是字符型;
格式 变量=值
例如: a=abc
declare -i varname=0
变量撤销: unset varname
变量类别:
本地变量:作用域为整个bash进程
环境变量:作用域为当前shell进程及其子进程
局部变量:作用域只对当前代码段有效
位置变量:$1,,,$n,${10} ,,,,,
特殊变量:
$?:状态返回值
$#:传递给脚本参数的个数
$*:显示所有的参数
$@:引用传递给脚本的所有参数
实例: 写一个脚本如下
执行结果解析:在脚本后面输入了4个参数,那么$1的值为1,$2的值为2,$*的值为所有参数值,$#的值为参数的个数4个,$@的值是所有参数的值,$0的值为返回脚本的名称,$?的值为此脚本执行状态的返回值0,脚本执行成功的状态返回值为0,如果脚本执行错误会返回1-255的值;
实例扩展:写一个如下脚本运行
结果分析:输入四个参数,$1的返回值为1,$2的返回值为3,$*的返回值为3和4,所有参数的值(可以理解为一共四个参数,两个shift,所以把左边两个参数值释放),$#返回参数的个数2个。由以上结果可以得出shift [n]的作用是把左边n个参数的值释放掉;
Bash基本运算:
Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。expr 是一款表达式计算工具,使用它能完成表达式的求值操作
1、算术运算:
+ |
加法 |
`expr $a + $b` 结果为 30。 |
– |
减法 |
`expr $a – $b` 结果为 10。 |
* |
乘法 |
`expr $a \* $b` 结果为 200。 |
/ |
除法 |
`expr $b / $a` 结果为 2。 |
% |
取余 |
`expr $b % $a` 结果为 0。 |
= |
赋值 |
a=$b 将把变量 b 的值赋给 a。 |
== |
相等。用于比较两个数字,相同则返回 true。 |
[ $a == $b ] 返回 false。 |
!= |
不相等。用于比较两个数字,不相同则返回 true。 |
[ $a != $b ] 返回 true。 |
乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
实例:
执行结果如下:
2、关系运算
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
运算符 |
说明 |
举例 |
-eq |
检测两个数是否相等,相等返回 true。 |
[ $a -eq $b ] 返回 true。 |
-ne |
检测两个数是否相等,不相等返回 true。 |
[ $a -ne $b ] 返回 true。 |
-gt |
检测左边的数是否大于右边的,如果是,则返回 true。 |
[ $a -gt $b ] 返回 false。 |
-lt |
检测左边的数是否小于右边的,如果是,则返回 true。 |
[ $a -lt $b ] 返回 true。 |
-ge |
检测左边的数是否大等于右边的,如果是,则返回 true。 |
[ $a -ge $b ] 返回 false。 |
-le |
检测左边的数是否小于等于右边的,如果是,则返回 true。 |
[ $a -le $b ] 返回 true。 |
执行结果如下:
字符串运算:
运算符 |
说明 |
举例 |
= |
检测两个字符串是否相等,相等返回 true。 |
[ $a = $b ] 返回 false。 |
!= |
检测两个字符串是否相等,不相等返回 true。 |
[ $a != $b ] 返回 true。 |
-z |
检测字符串长度是否为0,为0返回 true。 |
[ -z $a ] 返回 false。 |
-n |
检测字符串长度是否为0,不为0返回 true。 |
[ -n $a ] 返回 true。 |
str |
检测字符串是否为空,不为空返回 true。 |
[ $a ] 返回 true。 |
执行结果如下:
布尔运算符
运算符 |
说明 |
举例 |
! |
非运算,表达式为 true 则返回 false,否则返回 true。 |
[ ! false ] 返回 true。 |
-o |
或运算,有一个表达式为 true 则返回 true。 |
[ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a |
与运算,两个表达式都为 true 才返回 true。 |
[ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
执行结果如下:
文件测试运算符列表:
操作符 |
说明 |
举例 |
-b file |
检测文件是否是块设备文件,如果是,则返回 true。 |
[ -b $file ] 返回 false。 |
-c file |
检测文件是否是字符设备文件,如果是,则返回 true。 |
[ -b $file ] 返回 false。 |
-d file |
检测文件是否是目录,如果是,则返回 true。 |
[ -d $file ] 返回 false。 |
-f file |
检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 |
[ -f $file ] 返回 true。 |
-g file |
检测文件是否设置了 SGID 位,如果是,则返回 true。 |
[ -g $file ] 返回 false。 |
-k file |
检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 |
[ -k $file ] 返回 false。 |
-p file |
检测文件是否是具名管道,如果是,则返回 true。 |
[ -p $file ] 返回 false。 |
-u file |
检测文件是否设置了 SUID 位,如果是,则返回 true。 |
[ -u $file ] 返回 false。 |
-r file |
检测文件是否可读,如果是,则返回 true。 |
[ -r $file ] 返回 true。 |
-w file |
检测文件是否可写,如果是,则返回 true。 |
[ -w $file ] 返回 true。 |
-x file |
检测文件是否可执行,如果是,则返回 true。 |
[ -x $file ] 返回 true。 |
-s file |
检测文件是否为空(文件大小是否大于0),不为空返回 true。 |
[ -s $file ] 返回 true。 |
-e file |
检测文件(包括目录)是否存在,如果是,则返回 true。 |
[ -e $file ] 返回 true。 |
执行结果如下:
好了,时间紧,就先说到这里,有不完整和补充的地方希望大家指正。接下来有时间在说Shell的基本语法格式条件语句:if,case,循环语句:for while,until.希望大家有好的意见和建议并批评指正!!!我们一点一滴的去慢慢稳扎稳打,相信有一天你会成为你想成为的人!!!
原创文章,作者:wxdz_2004(古雨秋),如若转载,请注明出处:http://www.178linux.com/1974
评论列表(2条)
有理论有实战,不错。 格式上稍乱了些,虽然了些调整,整体效果还不是特别理想。另: 如果加上标签seo的效果会非常好
@stanley:多谢指点,在word中写的,然后粘贴到博客里面,表格的大小无法调整,后续继续努力,请多指教!