shell 编程笔记
#! /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 编程笔记的更多相关文章
- Shell编程笔记
Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理. 修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...
- shell编程笔记(1)
shell编程: 编译器,解释器 编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言 强类型(变量) 事先转换成可执行格式 C.C++.JAVA.C# ...
- linux系列之-—01 shell编程笔记
一.特殊变量($0.$1.$2. $?. $# .$@. $*) shell编程中有一些特殊的变量可以使用.这些变量在脚本中可以作为全局变量来使用. 名称 说明 $0 脚本名称 $1-9 脚本执行时的 ...
- shell编程笔记(基本部分)
1.变量 a.需要给变量赋值时,可以这么写: b.要取用一个变量的值,只需在变量名前面加一个$ ( 注意: 给变量赋值的时候,不能在"="两边留空格 ) c.然后执行 chmod ...
- SHELL编程笔记(二)之shell流程控制
Shell控制流程结构 本章内容有: 退出状态 While.for和until loops循环 If then else语句 脚本中动作 菜单 条件控制语句 If then els ...
- 小苏的Shell编程笔记之六--Shell中的函数
http://xiaosu.blog.51cto.com/2914416/531247 Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以 ...
- shell编程笔记1
参考文章:1 http://blog.csdn.net/wuwenxiang91322/article/details/9259877 通过chmod改变文件权限 补充知识: 1Linux文件的三 ...
- ubuntu shell编程笔记
and 命令 if [ A -a B ] then else fi while [ ] do done set command set these are parameters $1 s ...
- linux shell 编程笔记
重定向和管道 输出重定向:把在终端输出的内容保存到文件上 输入重定向:通过文件的格式输入内容到终端 管道:把上一条命令的输出作为下一条命令的输入,如同管道一样,所有命令同时进行,同时处理数据,不 ...
随机推荐
- python配置文件操作——configparser模块
# -*- coding: utf-8 -*- ''' Version : Python27 Author : Spring God Date : 2012-4-26 Info : 配置文件ini所在 ...
- CI下php操作memcached 的问题
CI下php操作memcached 的时候,获取memcached里不存在的key时候,会出错,然而放在程序的最后一行就不会出错,不知何故,mark一下.
- request.setAttribute()、session.setAttribute()和request.getParameter()的联系与区别(记录)
1.session.setAttribute()和session.getAttribute()配对使用,作用域是整个会话期间,在所有的页面都使用这些数据的时候使用. 2.request.setAttr ...
- GIT(2)----入门资料,分支管理,冲突解决
最近一直使用者GIT发现使用起来确实很不错,最近做些整理总结,发现了一些很不错的资料,收集在这里,以备忘. GIT入门挺简单的,之前有些过一篇文章,关于GIT的,但是都是一些生硬的操作,并没有系统的学 ...
- centos7 docker安装和使用_入门教程
说明:本文也是参考互联网上的文章写的,感谢相关作者的贡献. 操作系统 64位CentOS Linux release 7.2.1511 (Core) 配置好IP:192.168.1.160 修改yum ...
- no device found for connection ‘ System eth0′
解决办法: 1.删除/etc/udev/rules.d/70-persistent-net.rules文件,重启系统. 2.如果上面的不起作用,那么去看ifcfg-eth0文件中的HWADDR是否正确 ...
- SQL(insert、delete、update)执行成功,但是数据库表中无显示无记录
如题,程序中insert一条记录,调试过程中根据执行结果发现此条sql已经执行成功(影响行数为1且插入记录已生成自增主键正确值),但是查询数据库相应表时发现表中并无相应记录,通过直接在表中插入测试数据 ...
- Hyper-V创建固定大小虚拟机
1.新建硬盘 点击确定,就创建好了一个固定大小的vhd文件,下面我们开始创建虚拟机. 2.创建虚拟机 输入虚拟机名称 选择第一代虚拟机 我这里给虚拟机分配512MB内存 网络配置 在这之前我们已经创建 ...
- Maven学习-使用Nexus搭建Maven私服
为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...
- 我对NHibernate的感受(3):有些尴尬的集合支持
既然是一个ORM框架,那么自然是将O这一端映射R上.至于集合,是O这方面最常见,也是R这一边非常容易表示的关系.例如,一个问题(Question)可以包含多个回答(Answer),于是我的代码里就有这 ...