shell 编程基础
2015-07-12 19:51
615 查看
1 创建shell脚本文件
要创建一个shell脚本文件,必须在第一行指定要使用的shell,其格式为:
#! /bin/bash
接着加上该shell文件的注释,说明该脚本文件用来干什么,有谁创建,什么时候创建,如下:
将上述内容保存为01.sh,存放到如下目录中:
/root/shell
执行01,出现bash: 01: command not found,这是因为shell找不到01.sh所在的位置;
执行./01,出现bash: ./01.sh: Permission denied,这是因为当前用户对01.sh没有执行权限,运行ls –l 01.sh,得到-rw-r--r--. 1 root root 128 Jul 12 00:22 01.sh。那么就需要我们改变当前用户对于01.sh的权限:chmod u+x 01.sh,然后执行./01.sh:
![](http://images0.cnblogs.com/blog2015/759985/201507/121935038309518.png)
2 echo的使用
echo用于向显示器输出信息,默认情况下不需要使用引号将显示的文本括起来,如:
![](http://images0.cnblogs.com/blog2015/759985/201507/121938335961135.png)
但是如果即将显示的文本中使用了引号的话,需要用另一种引号将整个文本内容包含起来,如:
![](http://images0.cnblogs.com/blog2015/759985/201507/121938584248116.png)
3 变量的使用
3.1 环境变量
环境变量用于记录系统相关信息,可以用set命令来显示一份完整的环境变量列表:
![](http://images0.cnblogs.com/blog2015/759985/201507/121939472682195.png)
要使用环境变量VARIABLE,只需在shell脚本文件中如下使用:”${VARIABLE}”。
3.2 用户变量
用户变量名使用字母、数字、下划线构成的字符串,字符数量不超过20个,并且命名是大小写敏感的。变量定义格式如下:
NAME="benxintuzi"
ID=0001
注意:变量赋值时等号=两端不能有空格,如下所示:
![](http://images0.cnblogs.com/blog2015/759985/201507/121941073469163.png)
shell脚本可以根据变量值自动判断变量类型。
3.3 反引号
这是一个特殊的符号,一般在shell脚本之外很少用到它,与~位于同一个键上的符号。其作用是可以将shell命令执行的结果赋给一个变量,如下:
![](http://images0.cnblogs.com/blog2015/759985/201507/121941425801366.png)
4 输入/输出重定向
4.1 输出重定向
将shell命令执行结果输出到文件中,bash shell采用>来完成,格式如下:
command > outputfile
![](http://images0.cnblogs.com/blog2015/759985/201507/121943178613223.png)
但是>会覆盖文件中已有的数据,可以使用>>来向文件中追加数据。
![](http://images0.cnblogs.com/blog2015/759985/201507/121943419244306.png)
4.2 输入重定向
输入重定向将文件的内容重定向到shell命令中,使用<来完成,比如使用wc命令计算一个文本的行数、词数、字节数:
![](http://images0.cnblogs.com/blog2015/759985/201507/121944167058579.png)
表示dlog文本一共有4行,21个词,总共194个字节。
还有一种称为内联输入重定向的方法,可以使用命令行输入作为重定向输入,使用<<来完成,但是必须指定输入开始和结束的标志字符串。例如使用wc计算输入的三行数据,使用BT作为输入分界符,格式如下:
command << marker
# input data
marker
![](http://images0.cnblogs.com/blog2015/759985/201507/121945066437457.png)
表示输入数据共有3行,一共8个词,占用53个字节。
5 管道
将前一个命令的输出重定向到后一个命令的输入中,这个过程称为管道连接(piping)。
管道使用|表示,格式如下:
command1 | command2
6 数学运算
7 退出脚本
shell中运行的每个命令运行结束后都返回exit status,是一个0~255之间的整数值。Linux使用变量($?)来保存前个命令的退出状态码。
默认情况下,shell脚本返回脚本中最后一个命令的退出状态码。当然可以自定义一个退出状态码,用exit命令返回,比如:exit 5。如果退出状态码指定值大于255,那么shell将执行模256运算后返回。
要创建一个shell脚本文件,必须在第一行指定要使用的shell,其格式为:
#! /bin/bash
接着加上该shell文件的注释,说明该脚本文件用来干什么,有谁创建,什么时候创建,如下:
#! /bin/bash # function : This script displays the date and who’s logged in # author : benxintuzi # date : 2015-07-12 date who
将上述内容保存为01.sh,存放到如下目录中:
/root/shell
执行01,出现bash: 01: command not found,这是因为shell找不到01.sh所在的位置;
执行./01,出现bash: ./01.sh: Permission denied,这是因为当前用户对01.sh没有执行权限,运行ls –l 01.sh,得到-rw-r--r--. 1 root root 128 Jul 12 00:22 01.sh。那么就需要我们改变当前用户对于01.sh的权限:chmod u+x 01.sh,然后执行./01.sh:
![](http://images0.cnblogs.com/blog2015/759985/201507/121935038309518.png)
2 echo的使用
echo用于向显示器输出信息,默认情况下不需要使用引号将显示的文本括起来,如:
![](http://images0.cnblogs.com/blog2015/759985/201507/121938335961135.png)
但是如果即将显示的文本中使用了引号的话,需要用另一种引号将整个文本内容包含起来,如:
![](http://images0.cnblogs.com/blog2015/759985/201507/121938584248116.png)
3 变量的使用
3.1 环境变量
环境变量用于记录系统相关信息,可以用set命令来显示一份完整的环境变量列表:
![](http://images0.cnblogs.com/blog2015/759985/201507/121939472682195.png)
要使用环境变量VARIABLE,只需在shell脚本文件中如下使用:”${VARIABLE}”。
3.2 用户变量
用户变量名使用字母、数字、下划线构成的字符串,字符数量不超过20个,并且命名是大小写敏感的。变量定义格式如下:
NAME="benxintuzi"
ID=0001
注意:变量赋值时等号=两端不能有空格,如下所示:
NAME= "benxintuzi" echo My name is: ${NAME}.
![](http://images0.cnblogs.com/blog2015/759985/201507/121941073469163.png)
shell脚本可以根据变量值自动判断变量类型。
3.3 反引号
这是一个特殊的符号,一般在shell脚本之外很少用到它,与~位于同一个键上的符号。其作用是可以将shell命令执行的结果赋给一个变量,如下:
![](http://images0.cnblogs.com/blog2015/759985/201507/121941425801366.png)
4 输入/输出重定向
4.1 输出重定向
将shell命令执行结果输出到文件中,bash shell采用>来完成,格式如下:
command > outputfile
![](http://images0.cnblogs.com/blog2015/759985/201507/121943178613223.png)
但是>会覆盖文件中已有的数据,可以使用>>来向文件中追加数据。
![](http://images0.cnblogs.com/blog2015/759985/201507/121943419244306.png)
4.2 输入重定向
输入重定向将文件的内容重定向到shell命令中,使用<来完成,比如使用wc命令计算一个文本的行数、词数、字节数:
![](http://images0.cnblogs.com/blog2015/759985/201507/121944167058579.png)
表示dlog文本一共有4行,21个词,总共194个字节。
还有一种称为内联输入重定向的方法,可以使用命令行输入作为重定向输入,使用<<来完成,但是必须指定输入开始和结束的标志字符串。例如使用wc计算输入的三行数据,使用BT作为输入分界符,格式如下:
command << marker
# input data
marker
![](http://images0.cnblogs.com/blog2015/759985/201507/121945066437457.png)
表示输入数据共有3行,一共8个词,占用53个字节。
5 管道
将前一个命令的输出重定向到后一个命令的输入中,这个过程称为管道连接(piping)。
管道使用|表示,格式如下:
command1 | command2
6 数学运算
expr(Bourne shell提供) | |
ARG1 | ARG2 | 如果存在0或null,返回ARG2;否则返回ARG1 |
ARG1 & ARG2 | 如果存在0或null,返回0;否则返回ARG1 |
ARG1 < ARG2 | 如果ARG1小于ARG2,返回1;否则返回0 |
ARG1 > ARG2 | 如果ARG1大于ARG2,返回1;否则返回0 |
ARG1 = ARG2 | 如果ARG1等于ARG2,返回1;否则返回0 |
ARG1 != ARG2 | 如果ARG1不等于ARG2,返回1;否则返回0 |
ARG1 <= ARG2 | 如果ARG1小于或等于ARG2,返回1;否则返回0 |
ARG1 >= ARG2 | 如果ARG1大于或等于ARG2,返回1;否则返回0 |
ARG1 + ARG2 | 加法运算 |
ARG1 – ARG2 | 减法运算 |
ARG1 * ARG2 | 乘法运算 |
ARG1 / ARG2 | 除法运算 |
ARG1 % ARG2 | 取余运算 |
STRING : REGEXP | 如果STRING中存在REGEXP的匹配,返回该匹配 |
match STRING REGEXP | 如果STRING中存在REGEXP的匹配,返回该匹配 |
substr STRING POS LENGTH | 返回从POS开始,长度为LENGTH的子字符串 |
index STRING CHARS | 返回STRING中CHARS的位置 |
length STRING | 返回字符串STRING的长度 |
+TOKEN | 将TOKEN解释为字符串,即使是个关键字 |
(EXPRESSION) | 返回EXPRESSION的值 |
方括号$[operation](bash shell,为了与Bourne shell兼容,也包含了expr命令) | |
比如:var1=$[1 + 5] echo $var1 6 | |
注:bash shell运算符只支持整数运算。 | |
浮点数运算 | |
bc | bash计算器可以识别数字、变量、注释、表达式、程序块、函数等。 使用时输入bc,按下回车,然后输入表达式,就可以执行计算了;退出时,输入quit。 浮点数的精度由变量scale控制,比如在bash计算器中设置scale=4,那么3/4 = .7500。scale变量的默认值为0。 |
shell中运行的每个命令运行结束后都返回exit status,是一个0~255之间的整数值。Linux使用变量($?)来保存前个命令的退出状态码。
状态码 | 描述 |
0 | 命令成功结束 |
1 | 通用未知错误 |
2 | 误用shell命令 |
126 | 没有执行该命令的权限 |
127 | 没有找到命令 |
128 | 无效退出参数 |
128+x | Linux信号x的严重错误 |
130 | 命令通过Ctrl+C终止 |
255 | 退出状态码越界 |
相关文章推荐
- shell学习四十三天----临时性文件的建立与使用
- 树莓派 shell(ethtool、miitool)判断网口网线是否插好 方法总结
- shell学习四十二天----使用touch更新文件时间
- shell教程
- Windows Azure系列-- 配置Azure Power Shell
- 备份mysq binlog shell
- Linux-bash-快捷键
- SHELL正则表达式介绍
- 简介Java程序的Shell脚本包装
- shell脚本学习知识点(一)
- PHP使用root权限调用shell
- xshell的快捷键(提高效率)
- Linux定时shell脚本
- GIT---看我一步步入门(Windows Git Bash)
- Linux CentOS下shell显示-bash-4.1$不显示用户名路径
- linux下shell显示-bash-4.1#不显示路径解决方法
- shell中的点命令与source命令
- shell 入门教程
- 认识shell
- Bash启动脚本