BASH编程(一)

BASH介绍:

shell俗称壳,它是指UNIX系统下的一个命令解析器;主要用于用户和系统的交互。UNIX系统上有很多种Shell。首个shell,即Bourne Shell,于1978年在V7(AT&T的第7版)UNIX上推出。后来,又演变出C shell、bash等不同版本的shell。

bash,全称为Bourne-Again Shell。它是一个为GNU项目编写的Unix shell。bash脚本功能非常强大,尤其是在处理自动循环或大的任务方面可节省大量的时间。bash是许多Linux平台的内定Shell,这也是我们介绍它主要的原因。

bash基础语法:

1条件判断:

条件判断有2中格式,分别是"test 判断语句"和"[ 判断语句 ]"。

"test"判断语句,在实际中应用的比较少;相反的,"[]"判断语句应用很广。下面分别对它们进行介绍

�Cb 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d filename     如果 filename 为目录,则为真          [ -d /tmp/mydir ]
-e filename     如果 filename 存在,则为真            [ -e /var/log/syslog ]
-f filename     如果 filename 为常规文件,则为真      [ -f /usr/bin/grep ]
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-L filename     如果 filename 为符号链接,则为真      [ -L /usr/bin/grep ]
-r filename     如果 filename 可读,则为真            [ -r /var/log/syslog ]
-w filename     如果 filename 可写,则为真            [ -w /var/mytmp.txt ]
-x filename     如果 filename 可执行,则为真          [ -x /usr/bin/grep ]
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-s 当file存在文件大小大于0时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
(判断语句) 当判断语句为真
! 判断语句 当判断语句为假
判断语句1 -a 判断语句2 当判断语句1 2都为真
判断语句1 -o 判断语句2 当判断语句1或2都为真
-eq    等于
-ne    不等于
-gt    大于
-lt    小于
-le    小于等于
-ge    大于等于
-z     空串
=      两个字符相等
!=     两个字符不等
-n     非空串

2、if then elif else fi语句

if判断可以有3中写法

if 条件判断语句; then
    命令
fi
#如果条件判断为真则执行命令,否则跳过命令
if 条件判断语句; then
    命令1
else
    命令2
fi
#如果条件判断为真则执行命令1,否则执行命令2
if 条件判断语句1; then
    命令1
elfi 条件判断语句2; then
    命令2
else
    命令3
fi
#如果条件判断1为真则执行命令1,如果条件判断2为真则执行命令2,如果条件判断1和2都不为真则执行命令3

3 case语句

case语句写法
case 值 in
模式1}
命令1
...
;;
模式2)
命令2
...
;;
esac
#!/bin/bash
#########################################################################
# File Name: case.sh
# Author: LookBack
# Email: [email protected]
# Licence: GNU General Public Licence
# Created Time: Sun 03 Aug 2014 03:11:01 PM CST
#########################################################################

read -p "are you chinese? (Y/N):" chinese
case $chinses in
Y)
	echo "you are a chinese"
	;;
N)
	echo "you are not chinese"
	;;
*)
	echo "I do not know"
	;;
esac

4 for 循环

for语法格式

for 变量名 in 列表; do
	命令1
	命令2...
done
#!/bin/bash
#########################################################################
# File Name: for.sh
# Author: LookBack
# Email: [email protected]
# Licence: GNU General Public Licence
# Created Time: Sun 03 Aug 2014 03:15:28 PM CST
#########################################################################

for i in {1..10}; do
	echo $i
done
#变量名是i  列表是1到10的整数

5 while循环

while 语法格式

while 命令; do
	命令1
	命令2
	...
done

while当命令为假的时候才退出循环

6 until 循环

until循环和while用法基本是一样的但是其退出循环的条件是当命令为真的时候

7 bash的常见内建命令

(01)echo
命令:echo arg
功能:在屏幕上显示出由arg指定的字串
(02)read
命令格式:read变量名表
功能:从标准输入设备读入一行,分解成若干字,赋值给bash程序内部定义的变量
(03)shift
命令:shift [N] (N为大于0的整数;当N省略时,等价与于“shift 1”)
功能:所有的参数依次向左移动N个位置,并使用$#减少N,直到$#=0为止。
(04)alias
命令:alias name='value'
功能:别名。用name替换value,value要用单引号括住。
(05)export
命令:export变量名[=变量值]
功能:export可以把bash的变量向下带入子bash(即子bash中可以使用父bash的变量),从而让子进程继承父进程中的环境变量。但子bash不能用export把它的变量向上带入父bash。
(06)readonly
命令:readonly 变量名
功能:定义只读变量。不带任何参数的readonly命令将显示出所有只读变量。
(07)exec
命令:exec 命令参数
功能:当bash执行到exec语句时,不会去创建新的子进程,而是转去执行指定的命令,当指定的命令执行完时,该进程(也就是最初的bash)就终止了,所以bash程序中exec后面的语句将不再 
被执行。
(08)"."(点)
命令:. bash程序文件名
功能:使bash读入指定的bash程序文件并依次执行文件中的所有语句。
(09)exit
命令:exit N
功能:退出Shell程序。在exit之后可有选择地指定一个数位作为返回状态。

8 bash常见自带参数

$? 上次命令执行结果的返回值 返回值有0-255
$# 表示后接参数的 个数
$@ 表示全部变量
$* 表示全部变量 ($* $@的区别我还没弄清楚。。。。。)
$$ 当前shell的进程号
$! 上一个子进程的进程号
$0 当前shell的名字
$n 位置参数 n表示大于0的正整数

9 bash常用字符集

*: 任意长度的任意字符
?: 匹配任意单字符
[]: 匹配指定范围内的任意单字符
[^]:匹配指定范围以外的任意单字符

字符集合:
	[:space:] : 所有空白字符
	[:punct:] : 所有标点符号
	[:lower:] :所有小写字母
	[:upper:] :所有大写字母
	[:digit:] :所有数字
	[:alnum:] :所有数字和字母
	[:alpha:] :所有字母


你可能感兴趣的:(bash)