bash脚本编程
一、bash脚本编程
bash脚本编程(可以理解为命令的堆砌)
程序:包含语句和表达式(有判断和循环)
顺序执行
选择执行
循环执行
程序 = 指令 + 数据
了解:编程分为2种:面向过程编程:以指令为中心组织数据;面向对象编程:以数据为中心组织指令
故脚本编程可以归纳为面向过程的编程。
程序的执行模型 :
1、编译执行:源代码—>预处理—>编译—>汇编—>链接(编译器)
2、解释执行:源码—>(解释器)通过解释器执行
注:bash脚本的解释器bash
二、bash脚本的书写
shebang(定义脚本指定解释器),一般保存为.sh,linux没有严格的后缀要求
#!/bin/bash
#!/bin/bash cat /etc/shells sleep 20 #执行的时候,创建一个新的子进程,睡眠等待,子进程占用父进程进行等待
注:运行脚本的时候,要书写绝对路径。或者直接书写bash test.sh临时给予权限
bash -x test.sh 调试运行
[root@localhost tmp]# bash -x test.sh + cat /etc/shells #每个命令逐条显示,如有错误会进行提示 /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh + sleep 20 #这里是等待了20秒之后才继续执行下一条命令 + dasd test.sh: line 4: dasd: command not found [root@localhost tmp]#
三、变量相关知识
变量的定义:命名的内存空间
变量名和变量值组成,不同的视角变量有不同的分类
1、数据类型(按内容分)
强类型:例如c语言,对类型进行严格区分
弱类型:bash脚本编程等,bash把所有值都默认当作字符
数据类型的作用
(1)定义了数据存储格式
(2)数据的表示范围
(3)可以参与的运算类型不一样
2、类型(按格式分)
数值型:http://blog.51cto.com/user_index.php?action=addblog_new&did=126489
精确数值型:整数
近似数值型:float(单精度)double(双精度)课外作业(浮点数的存储格式)
字符型:不区分是否为单个字符
布尔型:true,false-->0,1
几个重要的逻辑运算符:
逻辑与运算: && a && b 全真才为真,有假为假
逻辑或运算: || a || b 全假才为假,有真为真
逻辑非运算: ! !a 取反的运算
四、bash变量类型
(1)本地变量:只对当前shell进程有效,对当前shell之外的shell无效(如父shell进程和子shell进程都无效)
[root@localhost tmp]# aa=3 [root@localhost tmp]# echo $aa 3 [root@localhost tmp]# bash [root@localhost tmp]# echo $aa [root@localhost tmp]# aa=2 [root@localhost tmp]# exit exit [root@localhost tmp]# echo $aa 3 [root@localhost tmp]#
(2)环境变量:对当前shell进程及其子shell进程有效
[root@localhost tmp]# export HELLO="hello1" [root@localhost tmp]# echo $HELLO hello1 [root@localhost tmp]# bash [root@localhost tmp]# echo $HELLO hello1 [root@localhost ~]# env | grep ‘HELLO‘ HELLO=hello1 [root@localhost ~]# unset HELLO #取消环境变量的设置(这里只对子进程生效) [root@localhost ~]# env | grep ‘HELLO‘ [root@localhost ~]# echo $HELLO [root@localhost ~]# exit exit [root@localhost ~]# echo $HELLO hello1 [root@localhost ~]#
注:env(printenv) 显示当前shell中的所用环境变量
[root@localhost tmp]# env #这里只列出部分环境变量,env=printenv HOSTNAME=localhost.localdomain TERM=xterm SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=192.168.199.180 54823 22 QTDIR=/usr/lib64/qt-3.3 QTINC=/usr/lib64/qt-3.3/include SSH_TTY=/dev/pts/1 USER=root
(3)局部变量:仅对某一段代码空间有效的变量,通常用于脚本函数
(4)位置变量:$1 $2,...
(5)特殊变量:$? $0 $# $$ $* $@
五、变量的引用及命名
1、${变量名}==变量的引用
·强引用: ‘‘ echo ‘root shell is $SHELL‘ 原样输出,不能解释$符号
·弱引用: “” echo “root shell is $SHELL” 输出“root shell is /bin/bash”
2、变量的命名规则
1、不能用程序中的关键字:if elif fi then for ....
2、只能使用数字、字母或下划线,且不能以数字开头
3、尽量做到见名知意
六、bash的配置文件
1、profile类:为交互式登陆的shell进程提供配置。
·对所有用户有效的配置文件即全局有效: /etc/profile和/etc/profile.d/*.sh
·仅对当前用户有效的配置文件即用户个人有效:~/bash_profile
注:profile类配置文件的功用:
(1)用以定义环境变量
(2)运行命令或脚本
2、bashrc类:为非交互式登陆的shell进程提供配置。
·全局有效:/etc/bashrc
·个人用户有效:~/.bashrc
注:bashrc类配置文件的功用:
(1)定义本地变量
(2)定义命令别名(alias)
如何使修改后的bash配置文件重新生效:(2种方法)
source配置文件 或者 .配置文件
配置文件生效的优先级:
·交互式登陆:/etc/profile->/etc/profile.d/*.sh->~/bash_profile->~/.bashrc->/etc/bashrc
所以定义此文件可以使其他文件全都生效。
·非交互式登陆:~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh
本文出自 “行成于思” 博客,请务必保留此出处http://meaningful.blog.51cto.com/4543452/1631658
原文地址:http://meaningful.blog.51cto.com/4543452/1631658