shell函数

快,学会 shell

故事扮演 提交于 2020-04-07 23:47:04
本文分成入门篇和基础篇。基础篇包括变量、字符串处理、数学运算三部分。基础篇包括流控制、函数和函数库三部分。主要是基于例子进行讲解,其中有 4 个复杂一点的脚本,看懂了也就入门了。 我们先来聊一聊 shell 和 shell script 的概念。计算机的运行离不开硬件,我们通过操作系统(OS,Operating System)操作硬件,而我们所说的 linux 严格来说是操作系统(OS)的核心部分——内核(Kernel)。我们无法直接操作 kernel,需要借助于 kernel 外的一层壳 shell 才能与 kernel 进行交互。如果把操作系统(OS)看做是一家公司,shell 就是前台,kernel 就是董事会。当我们访问公司的时候,先和前台(shell)打个招呼,前台通知董事会(kernel),董事会来控制公司(OS)。 俗话说“铁打的营盘流水的兵”,就是公司人来人往,都不会影响公司的运转。对于操作系统也一样,我们可以替换操作系统的前台(shell),甚至董事会(kernel)。如果你想知道你的系统中用到的是什么 shell 可以访问 /etc/shells 文件。,我的电脑上就有下面几种 shell: # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash /bin/zsh /usr

shell 脚本特殊符号

*爱你&永不变心* 提交于 2020-04-07 06:21:24
通过显示结果可以看到: $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1是传递给该shell脚本的第一个参数 $2是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义 在Bash shell中经常会见到一些比较特殊的符号,本人现收集与此,以供查阅: 位置参数: 详见ABS(Advanced Bash Shell)中文翻译版103页第9章第一节内部变量,当然英文版ABS都一样啦 $1, $2, $3等等... 位置参数,从命令行传递给脚本,或者是传递给函数.或者赋职给一个变量. 此数目可以任意多,但只有前 9 个可以被访问,使用 shift 命令可以改变这个限制。 (具体见Example 4-5 和Example 11-15) $0 $0表示 当前执行的进程名,script 本身的名字,或者在正则表达式中表示整行输出 $# 命令行或者是位置参数的个数.(见Example 33-2) $* 所有的位置参数,被作为一个单词. 注意:"$*"必须被""引用. $@ 与$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递, 并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的单词. 注意:"$@"必须被 "" 引用.

python中执行shell命令的4种方法

£可爱£侵袭症+ 提交于 2020-04-06 17:09:18
这里介绍一下python执行shell命令的四种方法: 1、os模块中的os.system()这个函数来执行shell命令 >>> os.system('ls') anaconda-ks.cfg install.log install.log.syslog send_sms_service.py sms.py 0 注,这个方法得不到shell命令的输出。 2、popen() 这个方法能得到命令执行后的结果是一个字符串,要自行处理才能得到想要的信息。 >>> import os >>> str = os.popen("ls").read() >>> a = str.split("\n") >>> for b in a: print b 这样得到的结果与第一个方法是一样的。 3、commands模块 可以很方便的取得命令的输出(包括标准和错误输出)和执行状态位 import commands a,b = commands.getstatusoutput('ls') a是退出状态 b是输出的结果。 >>> import commands >>> a,b = commands.getstatusoutput('ls') >>> print a 0 >>> print b anaconda-ks.cfg install.log install.log.syslog commands

马哥博客作业第三周

戏子无情 提交于 2020-04-06 02:09:08
正则表达式 一.文本编辑工具 1.文本编辑之神vim 1.1 vim的三种模式: 命令或普通(Normal)模式:默认模式,可以实现移动光标,剪切/粘贴文本 插入(Insert)或编辑模式:用于修改文本 扩展命令(extended command )或命令(末)行模式:保存,退出等 1.2 模式切换: 插入模式 --- ESC-----> 命令模式 命令模式 ---- : ----> 扩展命令模式 扩展命令模式 ----ESC,enter----> 命令模式 1.3 扩展模式的基本命令 w 写(存)磁盘文件 wq 写入并退出 x 写入并退出 X 加密 q 退出 q! 不存盘退出,即使更改都将丢失 r filename 读文件内容到当前文件中 w filename 将当前文件内容写入另一个文件 !command 执行命令 r!command 读入命令的输出 1.4 命令模式的基本命令 ZZ 保存退出 ZQ 不保存退出 1.4.2 光标跳转 字符间跳转: h: 左 L: 右 j: 下 k: 上 单词间跳转: w:下一个单词的词首 e:当前或下一单词的词尾 b:当前或前一个单词的词首 当前页跳转: H:页首 M:页中间行 L:页底 zt:将光标所在当前行移到屏幕顶端 zz:将光标所在当前行移到屏幕中间 zb:将光标所在当前行移到屏幕底端 行首行尾跳转: ^ 跳转至行首的第一个非空白字符

脚本编程(一)

∥☆過路亽.° 提交于 2020-04-05 19:33:05
脚本编程(一) 啰里啰唆:每周的最后一天都特别难受。墨迹扣不出文章。 一、概况 注释是以 # 开都的, # 开头不一定都是注释 SHELL 是解释型语言 SHELL 脚本第一句以 #!/bin/bash 开头 SHELL 脚本需要具有执行权限 一般以 .sh 结尾 别名在脚本中无效。在脚本中不能使用别名。 bash 使用技巧: -n 检查语法 , 无法无法检测处命令错误,同时只是检查语法不会真正执行脚本。 -x 逐行执行,逐行显示执行结果 脚本中的错误: 1 、语法错误,会导致后续的命令无法继续执行。可以通过 bash -n 选项来检查 提示的错误行不一定是准确的。 2 、命令错误,后续的命令还可以继续执行。无法通过 bash -n 选项来检查错误,可以使用 set -e 或者 set -o errexit 来设定遇到错误命令后退出 3 、逻辑错误,只能使用 bash -x 选项来检查错误。 变量: 变量表示命名的内存空间,讲数据放在内存空间中,通过 "$ 变量名 " 引用 , 从而获取数据 内置环境变量: PS1 SHELL HASTNAME $$ $? 自定义变量: [set] NAME=VALUE set 可以省略 变量类型: 字符型:默认都是字符型 数值:整型、 bash 不支持浮点型 静态编译语言,使用变量前,先声明变量类型,之后类型不能改变,在编译时执行检查, JAVA

python 调用 bash (python 调用linux命令)

本小妞迷上赌 提交于 2020-04-03 23:31:31
原文这里有显示地址:http://zhou123.blog.51cto.com/4355617/1312791 现在摘取一部分: 这里介绍一下python执行shell命令的四种方法: 1、 os模块中的os.system()这个函数来执行shell命令 1 2 3 >>> os.system( 'ls' ) anaconda - ks.cfg install.log install.log.syslog send_sms_service.py sms.py 0 注,这个方法得不到shell命令的输出。 2、 popen() #这个方法能得到命令执行后的结果是一个字符串,要自行处理才能得到想要的信息。 1 2 3 4 5 >>> import os >>> str = os.popen( "ls" ).read() >>> a = str .split( "\n" ) >>> for b in a: print b 这样得到的结果与第一个方法是一样的。 3、 commands模块 #可以很方便的取得命令的输出(包括标准和错误输出)和执行状态位 1 2 3 4 5 6 7 8 9 10 11 12 import commands a,b = commands.getstatusoutput( 'ls' ) a是退出状态 b是输出的结果。 >>> import commands >>>

shell_script1

倖福魔咒の 提交于 2020-04-02 07:32:55
1、简介 2、read 3、运算工具 4、if/then结构 5、while循环 6、for循环 一、简介 1、什么是shell shell是用户与系统交互作用的界面。shell是一种命令解释程序,同时也是一种高级程序设计语言 2、shell常见种类 Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell(/bin/bash) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh) Shell for Root(/sbin/sh) 其中:Bash在日常工作中被广泛使用; 同时,Bash也是大多数Linux系统默认的Shell; 3、shell局限性 1.1、需要耗费大量资源的任务,特别是对执行速度要求较高的场合 1.2、涉及大量的数学计算 1.3.、关键性应用(数据库,网站等) 1.4.、设计图形或者GUI的应用 1.5.、需要直接访问硬件 1.6.、开发闭源的应用(相对于开源) 4、基础 文件系统:Linux 的文件系统是一个包含了目录和文件的分层的组织结构,位于最顶端的叫做根目录(root directory),用斜杠/ 来表示 目录: 是一种包含目录项的文件,每个目录项中都包含了文件名 文件名: 目录的内容称为目录项,目录项包含了文件名,只有两种字符不允许出现在文件名中:斜杠,空字符(ASCII

C2 shell

家住魔仙堡 提交于 2020-04-01 01:04:31
1.什么是shell? 用户与内核之间的一个接口。最流行和常用的: bash。 2.重定向 > 重定向到另外的文件。0,1,2对一个程序来说是最常用的三个文件描述符! >>是把内容附加到文件的尾部而不会覆盖文件原有的内容。 这命令啥意思? #kill -HUP 1234 >kill.std 2>kill.stderr #kill -l 1234 > kill.std 2>&1 第一条语句的解读:>kill.std等同于1>kill.std,标准输出1是默认的可以不写! 第二条语句的解读: 将标准错误输出2绑定到标准输出1,然后将标准输出重定向到kill.std。 另外一个例子: [chengmo@centos5 shell]$ ls test .sh test1.sh > /dev/null 2>&1 #将错误输出2 绑定给 正确输出 1,然后将 正确输出 发送给 /dev/null设备 这种常用 注意: (1)shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在直接创建。 无论左边命令执行是否成功。右边文件都会变为空。很霸道的地方! (2)“>>”操作符,判断右边文件,如果不存在,先创建。以添加方式打开文件,会分配一个文件描述符[不特别指定,默认为1,2]然后,与左边的标准输出(1)或错误输出(2) 绑定。 (3)当命令执行完

第七周 可执行程序的卸载

不想你离开。 提交于 2020-03-28 22:40:52
一.预处理,编译,链接和目标文件的格式 可执行程序是怎么得来的: 预处理负责把include的文件包含进来及宏替换等工作 可执行文件的创建——预处理、编译和链接: 目标文件的格式ELF:A.out-->COFF-->PE/ELF ABI&目标文件格式: 一个可重定位保存着代码和适当的数据,用于和其他的object文件一起来创建一个可执行文件或是一个共享文件(主要是.o文件) 一个可执行文件保存着一个用来执行的程序,该文件指出exec(BA_OS)如何来创建程序进程映像(主要是.so文件) 当创建或增加一个进程映像的时候,系统理论上将拷贝一个文件的段到一个虚拟的内存段 一般静态链接会将所有代码放在一个代码段,动态链接的进程会有多个代码段 二.可执行程序,共享库和动态链接 可执行程序的执行环境 命令行参数和shell环境,一般我们执行一个程序的Shell环境即execve系统调用。 $ ls -l /usr/bin 列出/usr/bin下的目录信息 Shell本身不限制命令行参数的个数, 命令行参数的个数受限于命令自身 例如,int main(int argc, char *argv[]) 又如, int main(int argc, char *argv[], char *envp[]) Shell会调用execve将命令行参数和环境参数传递给可执行程序的main函数 int

神奇高效的Linux命令行

蓝咒 提交于 2020-03-25 17:47:48
一、为什么要学linux命令 Linux是由命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平,命令行方式的操作永远是不会变的。Linux命令有许多强大的功能:从简单的磁盘操作、文件存取,到进行复杂的多媒体图像和流媒体文件的制作,都离不开命令行。虽然Linux也有桌面系统,但是X-window也只是运行在命令行模式下的一个应用程序。 因此,可以说命令是学习Linux系统的基础,在很大程度上学习Linux就是学习命令,很多Linux高手其实都是玩儿命令很熟练的人。 也许对于刚刚从Windows系统进入Linux学习的初学者来说,立刻进入枯燥的命令学习实在太难,但是一旦学会就爱不释手。因为它的功能实在太强大了。 有很多初学者都会遇到这么一个问题,自己对系统的每个命令都很熟悉,但是在系统出现故障的时候,就无从下手了,甚至不知道在什么时候用什么命令去检查系统,这是很多Linux新手最无奈的事情了。说到底,就是学习的理论知识没有很好地与系统实际操作相结合。 很多Linux知识,例如每个命令的参数含义,在书本上说得很清楚,看起来也很容易理解,但是一旦组合起来使用,却并不那么容易,没有多次的动手练习,其中的技巧是无法完全掌握的。 人类大脑不像计算机的硬盘,除非硬盘坏掉或者硬盘被格式化,否则储存的资料将永远记忆在硬盘中,而且时刻可以调用。而在人类记忆的曲线中