shell 编程基础
1 创建shell脚本文件
要创建一个shell脚本文件,必须在第一行指定要使用的shell,其格式为:
#! /bin/bash
接着加上该shell文件的注释,说明该脚本文件用来干什么,有谁创建,什么时候创建,如下:
#! /bin/bash
# function : This script displays the date and who’s logged in
# author : benxintuzi
# date : -- 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:

2 echo的使用
echo用于向显示器输出信息,默认情况下不需要使用引号将显示的文本括起来,如:

但是如果即将显示的文本中使用了引号的话,需要用另一种引号将整个文本内容包含起来,如:

3 变量的使用
3.1 环境变量
环境变量用于记录系统相关信息,可以用set命令来显示一份完整的环境变量列表:

要使用环境变量VARIABLE,只需在shell脚本文件中如下使用:”${VARIABLE}”。
3.2 用户变量
用户变量名使用字母、数字、下划线构成的字符串,字符数量不超过20个,并且命名是大小写敏感的。变量定义格式如下:
NAME="benxintuzi"
ID=0001
注意:变量赋值时等号=两端不能有空格,如下所示:
NAME= "benxintuzi"
echo My name is: ${NAME}.

shell脚本可以根据变量值自动判断变量类型。
3.3 反引号
这是一个特殊的符号,一般在shell脚本之外很少用到它,与~位于同一个键上的符号。其作用是可以将shell命令执行的结果赋给一个变量,如下:

4 输入/输出重定向
4.1 输出重定向
将shell命令执行结果输出到文件中,bash shell采用>来完成,格式如下:
command > outputfile

但是>会覆盖文件中已有的数据,可以使用>>来向文件中追加数据。

4.2 输入重定向
输入重定向将文件的内容重定向到shell命令中,使用<来完成,比如使用wc命令计算一个文本的行数、词数、字节数:

表示dlog文本一共有4行,21个词,总共194个字节。
还有一种称为内联输入重定向的方法,可以使用命令行输入作为重定向输入,使用<<来完成,但是必须指定输入开始和结束的标志字符串。例如使用wc计算输入的三行数据,使用BT作为输入分界符,格式如下:
command << marker
# input data
marker

表示输入数据共有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=$[ + ] |
|
|
注:bash shell运算符只支持整数运算。 |
|
|
浮点数运算 |
|
|
bc |
bash计算器可以识别数字、变量、注释、表达式、程序块、函数等。 使用时输入bc,按下回车,然后输入表达式,就可以执行计算了;退出时,输入quit。 浮点数的精度由变量scale控制,比如在bash计算器中设置scale=4,那么3/4 = .7500。scale变量的默认值为0。 |
7 退出脚本
shell中运行的每个命令运行结束后都返回exit status,是一个0~255之间的整数值。Linux使用变量($?)来保存前个命令的退出状态码。
|
状态码 |
描述 |
|
0 |
命令成功结束 |
|
1 |
通用未知错误 |
|
2 |
误用shell命令 |
|
126 |
没有执行该命令的权限 |
|
127 |
没有找到命令 |
|
128 |
无效退出参数 |
|
128+x |
Linux信号x的严重错误 |
|
130 |
命令通过Ctrl+C终止 |
|
255 |
退出状态码越界 |
默认情况下,shell脚本返回脚本中最后一个命令的退出状态码。当然可以自定义一个退出状态码,用exit命令返回,比如:exit 5。如果退出状态码指定值大于255,那么shell将执行模256运算后返回。
shell 编程基础的更多相关文章
- 【转】Shell编程基础篇-下
[转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...
- 【转】Shell编程基础篇-上
[转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...
- shell编程基础(转载)
Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...
- Linux学习之二十一-shell编程基础
Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...
- 7-1 shell编程基础之二
shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...
- 6-2 shell编程基础
shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...
- shell编程基础进阶
为什么学习shell编程 shell脚本语言是实现linux/unix 系统管理机自动化运维所必备的重要工具,linux/unix系统的底层及基础应用软件的核心大部分涉及shell脚本的内容.每一个合 ...
- 基于Linux系统的Shell编程-基础篇
1. Shell基础介绍 1.1 Shell编程的意义 为什么使用shell编程 节约时间 1.2 显示脚本执行过程 前面有+表示执行过的命令的 前面没有东西,表示输出到屏幕上的内容. [root@C ...
- Shell 编程基础之变量和环境变量
一.变量赋值和引用 Shell 编程中,使用变量无需事先声明,同时变量的命名不惜遵循如下规则: 首个字符必须为字母(a-z,A-Z)或者_ 变量名中间不能有空格,可以使用_连接 不能使用其他表达符号 ...
随机推荐
- Bootstrap <第一篇>
一.使用Bootstrap要引用的文件 要使用Bootstrap,基本架构要引用如下文件: <link href="bootstrap.min.css" rel=" ...
- 【MariaDB】MariaDB编译参数
参考: http://wangfeng7399.blog.51cto.com/3518031/1393146?utm_source=tuicool http://www.phperz.com/arti ...
- dedecms 文章页调用来源合适时间的方法
时间: 一:{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/} 二:{dede:field name='pubdate ...
- Win8系统安装NET Framework 3.5的方法
1)找到下载过的Win8系统盘,解压到某个目录下,例如 F:, 找到解压的系统盘目录中"sources\sxs"文件夹 2)以管理员身份运行cmd命令,执行下面的命令: dism. ...
- how to extract and decrypt WeChat EnMicromsg.db on Android phone
One of my friend came to me with an Android phone. She saild somehting wrong with the hardware of he ...
- 网站屏蔽指定ip
修改.htaccess文件 Order Deny,Allow //开启屏蔽Deny from 124.64.242.117 //要屏蔽的ip
- 1.2Android系统移植的主要工作
1.Android移植分为两部分:应用移植和系统移植: 2.应用移植:指将第四层的应用程序一直到某一特定硬件平台上. (1)为保证应用程序能在新的平台上正常运行,需要对源代码就行一些修改,因为硬件平台 ...
- C++ inline(内联什么时候使用)
(1)什么是内联函数?内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内. (2)为什么要引入内联函数?当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题.另外,前面我们讲到 ...
- eclipse 中maven项目右键没有maven菜单问题
修改项目.project文件,确保有maven2Builder和maven2Nature2个标签: <?xml version="1.0" encoding="UT ...
- jquery中选择ID以什么字符开头的匹配主要用于多个上传控件的时候,id无法使用,而且class不起作用的时候
$("[id^=remark]")选择ID以remark开头的所有数据进行匹配