bash脚本编程学习笔记(一)
bash脚本语言,不同于C/C++是一种解释性语言。即在执行前不需要事先转变为可执行的二进制代码,而是每次执行时经解释器解释后执行。bash脚本语言是命令的堆砌,即按照实际需要,结合命令流程机制实现的源程序,因此他学习起来要比C/C++简单的多。
1.bash中的变量
bash中的变量分为本地变量,局部变量和环境变量等
本地变量:使用格式为varname=值,本地变量的声明周期为整个脚本进程
局部变量:使用格式为local varname=值,局部变量的声明周期为整个脚本进程
环境变量:使用格式为export varname=值,作用域为当前shell进程及子进程。命令脚本在执行时,会启动shell的子进程,命令行中启动的脚本会继承当前的shell环境变量,系统自动执行脚本(非命令行启动)就需要自我定义环境变量
位置变量:$1,$2...表示引用的参数
shift:踢出参数 shift n:表示踢出n个参数
特殊变量:$?保存了上一个命令执行的状态返回值(程序执行可能有两类返回值,一种是执行的状态返回值,一种是执行命令的返回值)
程序状态返回代码:(0-255)
0:表示执行正确
1-255:都是错误的
撤销变量:uset 变量名称
查看当前shell中的变量:set命令
查看当前shell中的环境变量:printenv,env,export
在原来的值后面补加一个值:
ANIMALS=pig
ANIMALS=$ANIMALS:gost
执行结果:pig:gost
注意:变量名称只能包含字母、数字和下划线,并且不能以数字开头,不应该跟系统中已有的环境变量重名,最好做到见名知意。
2.bash中的条件判断
条件测试类型:
整数测试,字符测试,文件测试
条件测试的表达式:
[ express ]:注意括号两侧有空格,括号中的表达式是关键字
[[express]
怎么写一个条件表达式:
整数比较:
-eq:测试两个整数是否相等,$A -eq $B
-ne:测试两个整数是否不等,不等为真,相等为假
-gt:测试一个数是否大于一个数,大于为真,小于为假
-lt:测试一个数是否小于一个数,小于为真,大于为假
-ge:大于或等于
-le:小于或等于
文件测试:
-e 文件名/文件路径 测试文件是否存在
-f 文件名/文件路径 测试文件是否为普通文件
-d 文件名/文件路径 测试文件是否是目录
-r 文件名/文件路径 测试文件是否是可读的
-w 文件名/文件路径 测试文件是否是可写的
-x 文件名/文件路径 测试当前用户是否可读可写可执行
3.命令件的逻辑关系
逻辑与:&&
第一个条件为假时,第二个条件不用再判断,最终结果已经有;
第一个条件为真,第二个条件必须得判断
逻辑或:||
只要有一个条件为真即可
eg:
user1存在就输出hello student
id user1 &> /dev/null&&echo "hello student"
如果user6不存在,就添加用户user6
!id user6&&useradd user6
id user6||useradd user6
如果用户存在,就显示此用户否则就添加此用户
id user1&&useradd user1||echo "user1 exits"
如果用户不存在,就添加,否则显示已存在
!id user1&&useradd user1||echo "user1 exits"
如果用户不存在,添加并且给密码;否则显示其已经存在
!id user1&&useradd&&echo "user1"|passwd --stdin user1||echo "user1 exits" //使用管道给user1添加密码
4.在shell中进行运算
1.使用let命令做运算:let C=$A+$B
2.$[算数运算表达式]:C=$[$A+$B]
3.$((运算表达式)):C=$(($A+$B))
4.expr算数运算表达式,表达式中各操作及运算符之间要有空格,而且要使用反引号将命令引用
C=`expr $A+$B`
5.条件判断控制结构
练习:写一个脚本
判断当前系统上是否有用户默认shell为bash,如果有,就显示其中的一个用户名,否则就显示没有这类用户
#!/bin/bash
grep "/<bash$" /etc/passwd &>/dev/null
RETVAL=$? //上一条命令的执行状态码,为0表示执行成功,否则失败
if [ $RETVAL -eq 0 ];then
AUSERS=`grep "\<bash$" /etc/passwd|head -1|cut -d: -f1` //显示用户名
echo "$AUSERS is one of such user"
else
echo "no such user"
fi
bash脚本编程学习笔记(一)的更多相关文章
- Bash脚本编程学习笔记08:函数
官方资料:Shell Functions (Bash Reference Manual) 简介 正如我们在<Bash脚本编程学习笔记06:条件结构体>中最后所说的,我们应该把一些可能反复执 ...
- Bash脚本编程学习笔记07:循环结构体
本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...
- Bash脚本编程学习笔记06:条件结构体
简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式. if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现, ...
- Bash脚本编程学习笔记04:测试命令test、状态返回值、位置参数和特殊变量
我自己接触Linux主要是大学学习的Turbolinux --> 根据<鸟哥的Linux私房菜:基础篇>(第三版) --> 马哥的就业班课程.给我的感觉是这些课程对于bash的 ...
- Bash脚本编程学习笔记05:用户交互与脚本调试
用户交互 在<学习笔记04>中我们有提到位置参数,位置参数是用来向脚本传递参数的一种方式.还有一种方式,是read命令. [root@c7-server ~]# read name alo ...
- bash脚本编程学习笔记(二)
1.脚本编程之函数 函数是实现结构化编程重要的思想,主要目的是实现代码重用 定义一个函数: function FUNCNAME { command //函数体 } FUNCNAME(){ //函数 ...
- Linux Shell脚本编程学习笔记和实战
http://www.1987.name/141.html shell基础 终端打印.算术运算.经常使用变量 Linux下搜索指定文件夹下特定字符串并高亮显示匹配关键词 从键盘或文件里获取标准输入 [ ...
- shell脚本编程学习笔记(一)
一.脚本格式 vim shell.sh #!/bin/bash //声明脚本解释器,这个‘#’号不是注释,其余是注释 #Program: //程序内容说明 #History: //时间和作者 二.sh ...
- shell脚本编程学习笔记(三)编写邮件报警脚本
一.shell编写邮件报警脚本 1.POSTFIX邮件服务器准备 a.首先卸载服务器上自带的sendmail rpm -qa sendmail* //查看安装的sendmail rpm -e send ...
随机推荐
- Common Lisp
[Common Lisp] 1.操作符是什么? 2.quote. 3.单引号是quote的缩写. 4.car与cdr方法. 5.古怪的if语句. 6.and语句. 7.判断是真假. null 与 no ...
- protobuf's custom-options
[protobuf's custom-options] protobuf可以设置属性,就像__attribute__可以给函数设置属性一样,protobuf更牛的是可以设置自定义属性.实际就是属性对象 ...
- 搭建简单的Spring框架
1.Spring框架相关jar包下载地址http://repo.springsource.org/libs-release-local/org/springframework/spring,复制,进入 ...
- 265. Paint House II 房子涂色K种选择的版本
[抄题]: There are a row of n houses, each house can be painted with one of the k colors. The cost of p ...
- DataGuard的cascading standby(1拖N的模式)
在Oracle11.2.0.2版本后,dataguard支持级联模式传输日志,即日志传输可以从A到B,B到C,B到D,等等,无穷无尽 cascading standby可以分担主库传输日志到多个备库的 ...
- DNS BIND之rndc介绍及使用
rndc(Remote Name Domain Controllerr)是一个远程管理bind的工具,通过这个工具可以在本地或者远程了解当前服务器的运行状况,也可以对服务器进行关闭.重载.刷新缓存.增 ...
- 用 RPM 打包软件,第 1 部分
http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part1/ RPM(Red Hat Package Manager ...
- [Laravel] mac下通过 homestead 搭建环境 到运行项目
seven_Android 关注 2017.07.03 21:33* 字数 2240 阅读 3464评论 10喜欢 9 之前学习过一段时间的 Laravel ,换 mac 后一直没空做相关的事情,而且 ...
- git 回退到某个特定提交
1.先用git log commit aba290c570d3894f4f39a1fdf52aa512c0231525 Author: huzhengbo <@qq.com> Date: ...
- (广搜)聪明的打字员 -- POJ --1184
链接: http://poj.org/problem?id=1184 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#probl ...