#! /bin/sh

寻找shell解释器 /bin/sh  是一个路径

#! /usr/bin/python

仅仅是寻找一个python的解释器





执行linux程序的方法:

使得文件具有可执行的权限 直接执行

调用解释器来运行

使用source来运行

shell 存在着内部命令 和外部命令 内建命令就是shell 程序本身的命令

运行内部命令的时候 不包含进程的创建和消亡

可是在运行外部命令的时候,存在着进程是创建和消亡。以此同一时候

外部命令运行的步骤例如以下:、

创建一个子进程

查找路径

子进程运行 父进程休眠

子进程运行完成。父进程从终端读取下一条命令





source 命令的运行不会 创建进程 更加的不会有进程的消亡 没有子进程

仅仅有在父进程中运行。





比如:echo.sh

#! /bin/sh

cd /tmp

echo "hello world"

运行方法选择的是 赋予权限的方式的话 ./echo.sh 此时父进程接受命令 发现不是内建命令 就会创建一个子进程(和父进程一模一样)来运行这个外部命令 此时子进程 来设置自己的环境变量 cd 命令改变的仅仅是子进程的文件夹 并没有改变父进程的文件夹 。子进程运行完毕 消亡,父进程等待下个命令运行 所以此方式下的运行 cd命令会失效。

所以选择的运行方式 是source的形式 就会运行 source不会创建子进程 仅仅是在父进程中进行。

shell变量:

全局变量 环境变量 自己定义变量

局部变量 必须使用local声明 否则还是全局可见的

export 用于设置当前的环境变量  





计算机 不能直接理解高级语言 须要将高级语言 翻译成机器语言 计算机才干看的明确 翻译是方式有两种 一种是:编译 一种是:解释

编译型的语言 是在程序运行之前 须要一个专门的编译过程 ,仅仅做一次的编译,运行的时候不须要进行编译了 运行效率较高

解释型的语言 是在程序在运行的时候 运行一次 翻译一次 效率较低。

脚本參数的传递

參数的传递 能够将外部的值传递到脚本的内部函数中去,提高脚本的灵活性。

testfunc()

echo "$# parameters";

echo "$@";





testfunc a b c 

3 parameters 

a b c 

testfunc a "b c"

2 parameters

a b c 





shell中的变量是不区分类型的 都是字符串类型 shell变量中有3中:用户变量 位置变量 环境变量 





linux中shell变量$#,$@,$0,$1,$2的含义解释: 

变量说明: 

$$ 

Shell本身的PID(ProcessID) 

$! 

Shell最后执行的后台Process的PID 

$? 

最后执行的命令的结束代码(返回值) 有数值的情况下返回数值 成功返回0值 退出的状态0 表示正常退出 非0表示执行出现异常 

$- 

使用Set命令设定的Flag一览 

$* 

全部參数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出全部參数。

$@ 

全部參数列表。

如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出全部參数。 

$# 

加入到Shell的參数个数 

$0 

Shell本身的文件名称 

$1~$n 

加入到Shell的各參数值。$1是第1參数、$2是第2參数…。 





启动文件:

/bin/login   读取/etc/passwd文件成功登录后,启动一个交互的shell

/etc/environment 环境变量 

假设须要对shell做全局性的设置 而且在每次的启动的时候 自己主动载入 能够将命令写入启动文件里去





type用于显示 命令是什么类型的 是外部命令 内建命令 别名...

shell 的函数

#! /bin/sh

# 数字相加





function add(){

let "sum=$1+$2"

return $sum

}

运行:

source add.sh 将函数从文件里读入 之后能够直接调用

add 3 7

echo $?

$? 保存是上一次的命令运行的返回值

7





shell的条件控制与流程





if condition

then 

statements

elif contition

then 

statements

else

statements

fi

shell里面的case语句 

case $1 in

-f) statements;;

-d) statements;;

esac 





for 循环语句

for name [in list]

do 

....

done

for file in `find . -iname "*.mp3"` //反单引號的作用就是将命令返回的结果作为字符串

do

mpg123 $file

done





无限循环 

path=$PATH

while true

do

if [-z $path]

then

break;

fi

ls -ld ${path%%:*}
//列出path中第一个文件夹

path=${path#*:}
//截取path中的第一个文件夹和冒号

done





Tips:

位置參数能够用shift命令左移。比方shift 3表示原来的$4如今变成$1。原来的$5如今变成$2等等,原来的$1、$2、$3丢弃,$0不移动。

不带參数的shift命令相当于shift 1。

很实用的 Unix 命令:shift。

我们知道。对于位置变量或命令行參数,其个数必须是确定的。

或者当 Shell 程序不知道其个数时,能够把全部參数一起赋值给变量$*。

若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把參数一一处理,

也就是在 $1 后为 $2,在 $2 后面为 $3 等。在 shift 命令运行前变量 $1 的值在 shift 命令运行后就不可用了。

linux shell里面的正則表達式:

定义:

简而言之,正則表達式就是记录文本规则的代码。

正則表達式:元字符 

\b 代表着单词的开头或是结尾

\d 代表着数字 比如0\d{2}-\d{8} 意思就是 010-12345678

grep 查找文本

正則表達式中的元字符:

^ :行或者字符串開始

$ :行或字符串结束

. :匹配一个非换行符的字符

* :匹配0个或多个先前字符 .* 代表随意字符

[...] :方括号表达式 [0-9]匹配单个数字 ^位于括号表达式的开头表示相反的意思[^0-9]不是0-9之间的数字

\ :打开或者关闭兴许字符

正則表達式:基本正則表達式 和扩展正則表達式

\(\): 

\n:

x\{m,n\}: 区间表达式 x出现的次数 最少m次 最多n次 

+: 匹配前面正則表達式的一个或者多个实例

?

: 匹配前面正則表達式的一个或者0个实例

():用括号括起来的正則表達式

|: 匹配|前面或者后面的正則表達式





grep支持的元字符

\<: 单词的開始

/>: 单词的结束

\w: 匹配文字或是数字 [:alnum:]

\W: 匹配非文字或是数字 [[:alnum:]_]

\b: 单词的锁定符





字符集:

[:alnum:]: 文字数字字符集 A-Za-z0-9

[:alpha:]: 文字字符集

[:blank:]: 空格或者定位字符

[:digit:]: 数字字符

[:graph:]: 非空字符

[:lower:]: 小写字符

[:cntrl:]: 控制字符

[:print:]: 非空字符

[:punct:]: 标点符号

[:space:]: 空白字符

[:upper:]: 大写字符

[:xdigit:]: 十六进制数字 0-9 a-f A-F





正則表達式里面的反向引用:

\(ab\)\(cd\)[efg]*\1\2 用来匹配: abcdabcd abcdeabcd abcdfabcd abcdgabcd \1: ab \2: cd 

\(go\).*\1 用来匹配一行出现了2个go

交替 | you|me 用来匹配 you 或者 me 交替的优先级是最低的

分组() (go)+ 匹配了一个go 或者是多个go 





罗马数字:

I=1

V=5 

X=10

L=50

C=100 CD=400 DC=600

D=500

M=1000 MCM=1900

shell 编程笔记的更多相关文章

  1. Shell编程笔记

    Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理.   修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...

  2. shell编程笔记(1)

    shell编程: 编译器,解释器 编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言    强类型(变量)    事先转换成可执行格式    C.C++.JAVA.C#           ...

  3. linux系列之-—01 shell编程笔记

    一.特殊变量($0.$1.$2. $?. $# .$@. $*) shell编程中有一些特殊的变量可以使用.这些变量在脚本中可以作为全局变量来使用. 名称 说明 $0 脚本名称 $1-9 脚本执行时的 ...

  4. shell编程笔记(基本部分)

    1.变量 a.需要给变量赋值时,可以这么写: b.要取用一个变量的值,只需在变量名前面加一个$ ( 注意: 给变量赋值的时候,不能在"="两边留空格 ) c.然后执行 chmod ...

  5. SHELL编程笔记(二)之shell流程控制

    Shell控制流程结构 本章内容有:   退出状态   While.for和until loops循环   If then else语句   脚本中动作   菜单 条件控制语句 If then els ...

  6. 小苏的Shell编程笔记之六--Shell中的函数

    http://xiaosu.blog.51cto.com/2914416/531247 Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以 ...

  7. shell编程笔记1

    参考文章:1 http://blog.csdn.net/wuwenxiang91322/article/details/9259877   通过chmod改变文件权限 补充知识: 1Linux文件的三 ...

  8. ubuntu shell编程笔记

    and 命令 if  [   A  -a   B ] then else fi while [ ] do done set command set  these are parameters $1 s ...

  9. linux shell 编程笔记

    重定向和管道  输出重定向:把在终端输出的内容保存到文件上  输入重定向:通过文件的格式输入内容到终端  管道:把上一条命令的输出作为下一条命令的输入,如同管道一样,所有命令同时进行,同时处理数据,不 ...

随机推荐

  1. MyBatis -- generator 逆向工程

    一.引言 官网文档:http://www.mybatis.org/generator/index.html 通过使用官方提供的mapper自动生成工具,mybatis-generator-core-1 ...

  2. 【51nod-1239&1244】欧拉函数之和&莫比乌斯函数之和 杜教筛

    题目链接: 1239:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 1244:http://www.51nod. ...

  3. Markdown中如何插入视频 > iframe?

    关于Markdown中如何插入视频这一问题   网上众说纷纭,一直也没找到一个确切的答案,想来也是,这些东西毕竟还不算成熟.各种以前提供过的方法现在来讲,可能在更新或是关闭大潮中又没了   而且,Ma ...

  4. HTML5 UI 控件Mobiscroll的使用(年月日三级联动)

    概述: 遇到制作一个html5界面,需要选择年月日,其实这个功能很常用.一般我们都是网上找,之前也没有收藏一个自己常用的,今天发现一个不错的库.特此记录一下使用过程,以便以后遇到了方面查阅. 1.官方 ...

  5. 关于ClickOnce的一些技术文章

    程序自动升级是我们经常遇到的需求,对于.Net程序来说,一个简单易用的方案是它内置的ClickOnce技术.ClickOnce出现的比较早,网上相应的教程还是比较丰富的,我这里就简单的整理一下相关的文 ...

  6. 2007 Audi A4 INSTRUMENT CLUSTER WIRING DIAGRAM

    BOSCH RB8 8E0920 951G I found the answer by myself...... Here is what it's work for me. GREEN CONNEC ...

  7. C++空类产生哪些成员函数 || C++类可以自动生成的6个成员函数

    class Empty {     public:     Empty(); // 缺省构造函数     Empty( const Empty& ); // 拷贝构造函数     ~Empty ...

  8. 字符串变量作mysql查询条件

    原文:http://blog.csdn.net/qing_gee/article/details/41646503 当你的查询条件是一个字符串变量时,你该怎么办,比如字符串可能是“0001ME,000 ...

  9. C# 输入法 z

    C# 输入法 虽说输入法不是什么新事物,各种语言版本都有,不过在C#不常见:这就会给人一种误会:C#不能做!其实C#能不能做呢,答案是肯定的——三种方式都行:IMM.TSF以及外挂式.IMM这种就是调 ...

  10. python测试开发django-5.模板templates

    前言 html是一个静态的语言,里面没法传一些动态参数,也就是一个写死的html页面.如果想实现在一个固定的html样式,传入不同的参数,这就可以用django的模板传参来解决. 模板参数 先在hel ...