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)或者_ 变量名中间不能有空格,可以使用_连接 不能使用其他表达符号 ...
随机推荐
- Sco Openserver下 配置SSH服务(图解)
Sco Openserver下 配置SSH服务 好久没玩儿Sco Unix系统了,春节过后为邮政系统的一个朋友调试系统( 装了个远程服务) ,这两天将安装过程回忆了一下,总结出来给大家分享. 本试验需 ...
- JavaScript设计模式
-->面向对象中的23种设计模式简介 最近看了一本书,推荐给大家<JavaScript设计模式与开发实践>图灵出版社的,讲的非常棒! 详细讲解了js开发中常用的14种设计模式,有很多 ...
- 【.NET】MD5的用法(对文件、字符串)
using System;using System.IO;using System.Security.Cryptography;using System.Text;namespace ConsoleA ...
- ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.
这个问题, 估计是由于 在 64位系统上运行 C#.net 项目的问题. 试试,将项目 生成属性 中的 平台改成 X86 编译重新发布试试
- php5.3 连接 sqlserver2005
操作系统:XP php5.3以后,已经不对sqlserver支持连接扩展了,不过微软官方还是对php5.3以后进行了扩展解决方案. 1.确认要连接sqlserver的数据库版本为2005 2.确认ph ...
- 二十一、contextMap中放的常用数据
二十一.contextMap中放的常用数据 request:请求范围的数据.即ServletRequest中的那个Map parameters:请求参数的数据.即request.getParamete ...
- 在信号处理函数中调用longjmp
错误情况及原因分析 前两天看APUE的时候,有个程序要自己制作一个sleep程序,结果在这个程序中就出现了在信号处理函数中调用longjmp函数的情况,结果就出现了错误,具体错误是啥呢,请参见下面这段 ...
- POJ C++程序设计 编程作业—类和对象 编程题 #2
编程题 #2 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 下面程序的输出 ...
- 软件工程 speedsnail 第二次冲刺6
20150523 完成任务:碰撞墙壁,或线身体翻转: 遇到问题: 问题1 身体翻转与帧数冲突 解决1 运用循环嵌套解决 明日任务: 蜗牛碰到线后速度方向的调整
- 显示和隐藏Mac隐藏文件的终端命令
打开终端,输入以下命令: 显示mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏mac隐藏文件的命令 ...