Linux shell 程序设计
shell 程序设计
主要的学习内容包含基本思路,语法:变量、条件判断和程序控制,命令列表,函数,命令及执行,调试,grep命令和正则表达式,find命令
什么是shell
适用编写执行相对简单任务的小工具。
linux系统中,标准shell是GNU工具集中bash(GNU Bourne—Again Shell)。查看bash版本号
/bin/bash --version
管道和重定向
- 重定向输出> ls -1 > lsoutput.txt
把ls命令的输出保存到文件lsoutput.txt中
其中参数 -1代表文件描述符,0代表程序的标准输入,1代表标准输出,2代表错误输出。> 把标准输出重定向到一个文件,覆盖已经有的文件
ps >> lsoutput.txt
其中>>表示把输出内容附加到文件后
把标准输出和标准错误输出都重定向到一个文件中,用>&来结合两个输出
kill -1 1234 >killouterr.txt 2>&1
- 管道
利用管道操作符|来连接进程。通过管道连接的进程可以同时运行,并且随着数据流在它们之间的传递可以自动的进行协调
ps -xo comm | sort | uniq | grep -v sh |more
这一命令按照字母顺序排序ps命令的输出,接着用uniq去除相同名字的进程,然后用grep -v sh删除sh的命令,最后将结果显示在屏幕上。
程序设计语言的shell
- 交互式程序
即在命令行上直接输入shell脚本。要继续输入时$就变成了>,由shell判断何时输入完毕并执行脚本程序
- 创建脚本
- 用文本编辑器创建一个脚本 first2. 运行脚本的方式有两种
/# !后面的参数指的是用来执行本文件的程序。
/bin/sh first
chmod +x first first(shell的环境变量PATH为要在当前目录下查找要执行的命令)或者./first(建议使用)
shell的语法
变量
特点是
- 使用时不需要做出声明,使用时同时创建。
- 区分大小写
- 通过在变量名前加$来访问。然后通过echo来显示。
例子 引号以及read的使用 variable
# !bin/sh
myvar="Hi there"
echo $myvar echo "$myvar" echo '$myvar' echo $myvar
read myvar echo $myvar
输出为 Hi there Hi there $myvar $myvar
在变量前面加$能显示变量的内容,使用双引号不影响变量的替换,使用单引号和\不进行变量的替换,用read从用户处读入一个字符串。
环境变量
$HOME : 当前目录的家目录
$PATH: 用冒号分隔用来搜索命令的目录列表
$PS1:
$0:脚本名字
$#:传递给脚本的参数个数
$$:脚本的进程号
$1,2,3:脚本的参数
条件
test []:shell的布尔判断命令
if [-f fred.c]
then ..... fi
- test 可以使用的条件类型:字符串比较,算术比较和文件有关的测试
-d file :文件是否为目录
-e:存在
-f:普通文件
控制结构
- if then elif then fi.
``if condition
then statements elif statements else statements fi
for .. in .. do done
while do done
#!/bin/sh
echo "password"
read password
while [ "$password" != "secret" ]
do
echo "sorry,try again"
read password
done
exit 0
常用写法 while [ ]; do
until
until ..do :循环根据就不需要执行采用util,至少执行一次采用while
- case
- 命令列表
将几条命令连接成一个序列,执行某个语句之前同时满足好几个条件
AND列表
state1 && state2 && state3
从左到右顺序执行每条命令,只有前一条返回true,它下一条命令才执行。state1 || state2 || state3
函数
function_name() {
statements
}
命令
break:用于跳出当前循环,只跳出一层循环
:命令是一个空命令,用来简化逻辑,相当于true的别名。
while :相当于 while true
: ${var:=value}
- .命令
../shell_script 用于在当前shell中执行命令 - eval 命令
像个额外的$,给出一个变量值的值 - exec命令
将当前shell替换为一个不同的程序 - export 命令
一旦一个变量被shell导出,它可以被该shell调用的任何脚本使用,也可以被后续依次调用的任何shell使用
- expr 命令
将它的参数当作一个表达式来求值 可以用$()来替换
printf 命令
set命令
作用为为shell脚本设置参数变量。shift
把所有参数变量左移一个位置,使$2变成$1
下面代码实现依次扫描所有的位置参数
\#!/bin/sh
while [ "$1" != "" ]; do
echo "$1"
shift
done
exit 0
- trap命令
用于指定在接收到信号后要采取的行动。
用法: trap command signal
command:接收到信号后要采取的行动。
signal:要处理的信号名。 - unset命令
用于从环境中删除变量或函数。
正则表达式极其相关的命令
- find 命令
find的完整语法格式:
find [path] [options] [tests] [actions]
path :可以选择绝对路径也可以选择相对路径。
使用操作符和圆括号的find命令
比如在当前目录下找出文件中比test_for 更新并且以test_为后缀的文件
例1.
find . \( -name "test_*" -and -newer test_for \) -type f -print
命令解释:用\转义(),因为()在shell里面有特殊含义,用-and来连接两个测试(-or 或 -not )
例2.
find . -newer test_for -type f -exec ls -l {} \;
命令解释:-exec 执行一条命令,读取参数直到;为止,{}是-exec的参数,它被当前文件的完整路径取代。
- gerp命令
grep(General Regular Expression Parser )
find 用来在系统中搜索文件,而grep命令在文件中搜索字符串。
grep [options] PATTERN [FILES]
Linux shell 程序设计的更多相关文章
- Linux 的使用基础---Shell程序设计
Shell是Linux系统中的一个重要的层次,它是用户与系统交互作用的界面.Shell除了作为命令解释程序以外,还是一种高级程序设计语言.利用Shell程序设计语言可以编写出功能很强.但代码简单的程序 ...
- Linux程序设计之shell程序设计
看了<linux程序设计(第4版)>(作者:Neil Matthew ,Richard Stones ,陈建 ,宋健建译).做个笔记,以备后面查看. 首先,清楚几个概念. shell编程属 ...
- Linux Shell 工作原理
Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序.它不属于内核部分,而是在核心之外,以用户态方式运行.其基本功能是解释并执行用户打入的各种命令,实现用户与Linux核心的接口.系 ...
- linux shell sleep/wait(转载)
linux shell sleep/wait(转载) 2007-04-27 18:12 bash的基本配置是由配置文件组成的./etc/profile称之为shell的全局配置文件.另外一个文件在个人 ...
- linux shell 正则表达式(BREs,EREs,PREs)差异比较
linux shell 正则表达式(BREs,EREs,PREs)差异比较 则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符 串的单个字符串.在很多文本编辑器或其他工具里 ...
- Linux Shell 简介
什么是 Shell Shell 是用户和 Linux 内核之间的接口程序,当从 Shell 或其他程序向 Linux 传递命令时,内核会做出相应的反应: Shell 是一个命令语言解释器,它拥有自己内 ...
- Linux shell (6)
1.linux shell函数: 将一组命令集或语句形成一个可用的块,这些语句块成为函数. 2.shell 函数的组成: 函数名:函数的名字,注意一个脚本中函数名要唯一,否则会引起调用函数紊乱 函 ...
- Linux shell(5)
shell程序流程控制的三大结构: 1. 顺序结构 2.选择结构 3.循环结构 顺序结构的定义: 顺序结构的程序设计是最简单的一种结构,它的执行顺序自上而下,依次执行,因此,我们只要按照解决问题的思路 ...
- linux shell 正则表达式(BREs,EREs,PREs)的比较
原文 : linux shell 正则表达式(BREs,EREs,PREs)差异比较 在使用 linux shell的实用程序,如awk,grep,sed等,正则表达式必不可少,他们的区别是什么 ...
随机推荐
- Python高级编程之生成器(Generator)与coroutine(一):Generator
转载请注明出处:点我 这是一系列的文章,会从基础开始一步步的介绍Python中的Generator以及coroutine(协程)(主要是介绍coroutine),并且详细的讲述了Python中coro ...
- ubuntu下更改分辨率
在虚拟机中装了ubuntu但是没有1600*900的分辨率 第一步: xrandr -q 查看现在系统中所有的分辨率 第二步: cvt 1600 900 得到所需的更改分辨率数据 第三步: ww ...
- 数论 + 扩展欧几里得 - SGU 106. The equation
The equation Problem's Link Mean: 给你7个数,a,b,c,x1,x2,y1,y2.求满足a*x+b*y=-c的解x满足x1<=x<=x2,y满足y1< ...
- web 汇率
http://www.cnblogs.com/beimeng/p/3789940.html 网站虽小,五脏俱全(干货) 前言 最近一个朋友让帮忙做一个汇率换算的网站,用业余时间,到最后总算是实现了 ...
- 【BZOJ】1639: [Usaco2007 Mar]Monthly Expense 月度开支(二分)
http://www.lydsy.com/JudgeOnline/problem.php?id=1639 同tyvj1359,http://www.cnblogs.com/iwtwiioi/p/394 ...
- 透過 bc 計算 pi
echo "scale=${num}; 4*a(1)" | bc -lq例如: echo "scale=5000; 4*a(1)" | bc -lq 4*a(1 ...
- layDate/DatePicker日期时间空间
真心不错,果断收藏了. 1.示例与效果 2.更多示例与皮肤 补充说明:My97DatePicker日期时间插件 的使用 1.示例与效果 2. 更多 常用的实例:WdatePicker下载 http:/ ...
- hmacSHA1
import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; publ ...
- 第七篇:使用 CUDA 进行计算优化的两种思路
前言 本文讨论如何使用 CUDA 对代码进行并行优化,并给出不同并行思路对均值滤波的实现. 并行优化的两种思路 思路1: global 函数 在 global 函数中创建出多个块多个线程对矩阵每个元素 ...
- VS2013新特性
大家可能看到我这边颜色和字体和原本不同,这里特意分享给大家背景护眼色值(这对每天看电脑的程序员很重要对不对!)还有字体: 工具-选项-字体和颜色:在项背景点击自定义-色调85 饱和度123 亮度205 ...