shell函数

Linux下的Shell工作原理

可紊 提交于 2019-12-07 14:13:50
Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序。它不 属于内核部分,而是在核心之外,以用户态方式运行。其基本功能是解释并 执行用户打入的各种命令,实现用户与Linux核心的接口。系统初启后,核 心为每个终端用户建立一个进程去执行Shell解释程序。它的执行过程基本 上按如下步骤: (1)读取用户由键盘输入的命令行。 (2)分析命令,以命令 名作为文件名,并将其它参数改造为系统调用execve( )内部处理所要求的 形式。 (3)终端进程调用fork( )建立一个子进程。 (4)终端进程本身用系 统调用wait4( )来等待子进程完成(如果是后台命令,则不等待)。当子进 程运行时调用execve( ),子进程根据文件名(即命令名)到目录中查找有 关文件(这是命令解释程序构成的文件),将它调入内存,执行这个程序( 解释这条命令)。 (5)如果命令末尾有&号(后台命令符号),则终端进程 不用系统调用wait4( )等待,立即发提示符,让用户输入下一个命令,转⑴ 。如果命令末尾没有&号,则终端进程要一直等待,当子进程(即运行命令 的进程)完成处理后终止,向父进程(终端进程)报告,此时终端进程醒来 ,在做必要的判别等工作后,终端进程发提示符,让用户输入新的命令,重 复上述处理过 程。-------------------------------------------

大神教你如何在 Linux 中启用 Shell 脚本的调试模式

人盡茶涼 提交于 2019-12-07 14:13:14
导读 脚本是存储在一个文件的一系列命令。在终端上输入一个个命令,按顺序执行的方法太弱了,使用脚本,系统中的用户可以在一个文件中存储所有命令,反复调用该文件多次重新执行命令。 在学习脚本或写脚本的初期阶段,我们通常从写小脚本或者几行命令的短脚本开始,调试这样的脚本时我们通常无非就是通过观察它们的输出来确保其正常工作。 然而,当我们开始写非常长或上千行命令的高级脚本,例如改变系统设置的脚本,在网络上执行关键备份 等等,我们会意识到仅仅看脚本输出是不足以在脚本中找到 Bug 的! 因此,在 Linux 系列中这篇介绍 Shell 脚本调试, 我们将看看如何启用 Shell 脚本调试,然后在之后的系列中解释不同的 Shell 脚本调试模式以及如何使用它们。 如何开始写一个脚本 一个脚本与其它文件的区别是它的首行,它包含 #!(She-Bang - 释伴:定义文件类型)和路径名(解释器路径),通知系统该文件是一个命令集合,将被指定程序(解释器)解释。 下面是不同类型脚本首行示例: #!/bin/sh [sh 脚本] #!/bin/bash [bash 脚本] #!/usr/bin/perl [perl 程序] #!/bin/awk -f [awk 脚本] 注意:如果脚本仅包含一组标准系统命令,没有任何内部 Shell 指令,首行或#!可以去掉。 如何在 Linux 操作系统执行 Shell

6、shell-函数

爱⌒轻易说出口 提交于 2019-12-07 12:50:25
1 系统函数 1.basename 基本语法 basename [string / pathname] [suffix] (功能描述: basename 命令会删掉所有的前缀包括最后一个( ‘/’ )字符,然后将字符串显示出来。 选项: suffix 为后缀,如果 suffix 被指定了, basename 会将 pathname 或 string 中的 suffix 去掉。 2. 案例实操 ( 1 )截取该 /home/atguigu/banzhang.txt路径 的文件名称 [atguigu@hadoop101 datas]$ basename /home/atguigu/banzhang.txt banzhang.txt [atguigu@hadoop101 datas]$ basename /home/atguigu/banzhang.txt .txt banzhang 3. dirname 基本语法 dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)) 4. 案例实操 ( 1 )获取 banzhang.txt文件 的路径 [atguigu@hadoop101 ~]$ dirname /home/atguigu/banzhang.txt /home/atguigu 2 自定义函数 1.

Unix系列shell程序编写从入门到精通(下)

落爺英雄遲暮 提交于 2019-12-07 10:21:38
Until语句 While语句中,只要某条件为真,则重复执行循环代码,until语句正好同while相反,该语句使循环代码重复执行,直到遇到某一条件为真才停止。 Until语句的结构如下: until command do command command … … done 可以用until语句替换上面备份程序的while语句,完成同样的功能: until [ $ANS != Y -a $ANS != y ] for 循环 在介绍for循环之前,我们要学个非常有用的unix命令:shift。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当Shell程 序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求Shell在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在$1后 为$2,在$2后面为$3等。在 shift命令执行前变量$1的值在shift命令执行后就不可用了。 示例如下: #测试shift命令(x_shift.sh) until [ $# -eq 0 ] do echo "第一个参数为: $1 参数个数为: $#" shift done 执行以上程序x_shift.sh: $./x_shift.sh 1 2 3 4 结果显示如下: 第一个参数为: 1 参数个数为: 3 第一个参数为: 2 参数个数为: 2 第一个参数为: 3 参数个数为:

当Shell遇上了NodeJS

青春壹個敷衍的年華 提交于 2019-12-07 01:37:46
序言 无论在传统的企业级系统维护还是在互联网运维中,Shell脚本的编写与维护常常必不可少,在系统管理员或开发人员工作中占比重比较大的一部分。 Shell脚本的严格语法格式对于一般的运维人员来说,常常会在一不留神下而抓狂或查找半天才发现是因为多了或少了一个空格或某语包括号不匹配而导致的错 误,不但大大的浪费了脚本维护人员的工作时间,还可能影响到工程进度甚至项目的发布里程碑等。当然,对于非纯Geek来说,最重要的还是影响心情,特别是 对于一些较复杂的脚本需求,更是必须小心谨慎,因此越来越多的开发人员必须借助于Python、Perl、Ruby等相关的脚本语言来实现,但是常由于平 台的特性或者语言的限制,对系统级的命令调用或者异常处理有限制,最终解决起来并不是十分优雅。 NodeJS的出现或许会给这些开发人员带来一些新的选择。 NodeJS 从诞生起发展非常迅速,社区活动非常活跃,目前扩展模块达到1500多个,并且每天都有不同的模块提交。它是构建在JavaScript引擎 V8 之上的JavaScript环境,它采用基于单线程的异步事件驱动I/O模型,具有非常高的 性能 , 同时能够支持多种平台。日前国外的很多大的软件或互联网公司如Microsoft,ebay,yahoo等都在使用NodeJS,国内的网易,淘宝,新浪 等互联网企业也有很多分享和成功的线上案例应用。言归正传

Unix系列shell程序编写从入门到精通(上)

心不动则不痛 提交于 2019-12-06 18:31:03
*Shell 是什么 ? 任何发明都具有供用户使用的界面。 UNIX 供用户使用的界面就是 Shell(DOS 的 command 熟悉吧,但 UNIX 的要强大的多 ) 。 Shell 为用户提供了输入命令和参数并可得到命令执行结果的环境。 为了不同的需要, UNIX 提供了不同的 Shell 。现在的 UNIX 大部分都支持 BourneShell ,以下教程就以 BourneShell(Bsh) 为例,一步步的领略 UNIX Shell 的强大功能,占先其强大魅力,达到更方便灵活的管理、应用 UNIX 的目的。 1.UNIX 内核和 Shell 的交互方法 启动 UNIX 时,程序 UNIX( 内核 ) 将被调入计算机内存,并一直保留在内存中直到机器关闭。在引导过程中,程序 init 将进入后台运行一直到机器关闭。该程序查询文件 /etc/inittab ,该文件列出了连接终端的各个端口及其特征。当发现一个活动的终端时, init 程序调用 getty 程序在终端上显示 login 等登陆信息。 (username 和 passwd) ,在输入密码后, getty 调用 login 进程,该进程根据文件 /etc/passwd 的内容来验证用户的身份。若用户通过身份验证, login 进程 把用户的 home 目录设置成当前目录并把控制交给一系列 setup 程序。

source

扶醉桌前 提交于 2019-12-06 14:25:35
你是否被下面的几个问题困扰过,甚至至今无法真正理解? 什么是 export ,什么时候用export,为什么有时用了export还要 source ? 为什么用 env 来设置环境变量,不用export,有什么好处? source 和 exec 有什么区别? 本文试图通过普及unix进程、环境变量等概念,让读者真真理解这些shell命令的本质,知道这些命令的使用场合。 首先,先对这些命令做一个解释,如果读者能完全理解,那么本文也许对你帮助不大。 set 设置了当前shell进程的 本地变量 ,本地变量只在当前shell的进程内有效,不会被子进程继承和传递。 env 仅为将要执行的子进程设置 环境变量 。 export 将一个shell本地变量提升为当前shell进程的 环境变量 ,从而被子进程自动继承,但是export的变量无法改变父进程的环境变量。 source 运行脚本的时候,不会启用一个新的shell进程,而是在当前shell进程环境中运行脚本。 exec 运行脚本或命令的时候,不会启用一个新的shell进程,并且exec后续的脚本内容不会得到执行,即当前shell进程结束了。 在这些表述中,反复提到 进程 和 环境变量 的概念。如果希望深入理解其中的含义,还必须理解进程的相关概念。 进程和环境变量 进程是一个程序执行的上下文集合,这个集合包括程序代码、数据段、堆栈、环境变量

[学习笔记]C编程执行shell命令

六月ゝ 毕业季﹏ 提交于 2019-12-06 14:15:22
写一些shell脚本个人更喜欢用python或者c,一方面是因为bash掌握不精。。。。另一方面是c中执行shell命令可以快速将结果传回程序中进行后续处理,而python便捷的字符串处理可以让脚本写的更加迅速。 本章先简单介绍一些C的相关内容,从而可以让你快速用C语言写一个调用shell的程序 首先介绍一下C程序如何获取命令行参数 int main(int args,char* argv[]) args就是参数数量,而argv为参数数组 在stdlib.h库中,支持函数 system(command) 该函数会直接执行shell命令,如果有输出则直接打印在bash上,不会返回给我们的程序 第二种常见方法为 FILE * fp; char buffer[256]; fp=popen(“ls”,”r”); fgets(buffer,sizeof(buffer),fp); printf(“%s”,buffer); pclose(fp); 通过popen将输出返回到一个文件指针上,可以通过读取文件的方式获得输出。 来源: https://www.cnblogs.com/trickofjoker/p/11988921.html

shell笔记-local、export用法

喜你入骨 提交于 2019-12-06 12:54:47
shell笔记-local、export用法 2014-08-10 16:27:26 分类: LINUX local一般用于局部变量声明,多在在函数内部使用。 1. Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止。 2. Shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变量定义的地方”开始,到shell结束或被显示删除处为止。函数定义的变量可以被显示定义成local的,其作用域局限于函数内。但请注意,函数的参数是local的。 3. 如果同名,Shell函数定义的local变量会屏蔽脚本定义的global变量。 ----------------------------------------------------------------------------------------------- export:将自定义变量设定为系统环境变量(仅限于该次登陆操作,当前shell中有效) 语  法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。 参  数: -f  代表[变量名称]中为函数名称。   -n  删除指定的变量。变量实际上并未删除

Linux基础操作及概念

落花浮王杯 提交于 2019-12-06 08:38:33
Linux基础操作及概念 终端的概念 通常我们在使用 Linux 时,并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示输出,Linux 系统还提供了一个叫做终端模拟器的程序(Terminal)。 比如:terminator 安装分屏终端:sudo apt-get install terminator 快捷键:ctrl+alt+t 打开终端 Shell 1,通常在图形界面中对实际体验带来差异的不是上述的不同发行版的各种终端模拟器,而是这个 Shell(壳)。有壳就有核,这里的核就是指 UNIX/Linux 内核,Shell 是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS 下的 command(命令行)和后来的 cmd.exe 。普通意义上的 Shell 就是可以接受用户输入命令的程序。它之所以被称作 Shell 是因为它隐藏了操作系统底层的细节。同样的 UNIX/Linux 下的图形用户界面 GNOME 和 KDE,有时也被叫做“虚拟 shell”或“图形 shell”。 2,UNIX/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言。当然这一点也有别于 Windows 下的命令行,虽然该命令行也提供了很简单的控制语句。在 Windows 操作系统下