shell函数

执行命令行

与世无争的帅哥 提交于 2020-03-23 21:50:13
1、Linux下使用popen()执行shell命令( http://www.cnblogs.com/caosiyang/archive/2012/06/25/2560976.html ) 简单说一下popen()函数 函数定义 #include <stdio.h> FILE * popen(const char *command , const char *type ); int pclose(FILE *stream); 函数说明   popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这个管道必须由pclose()函数关闭,而不是fclose()函数。pclose()函数关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态。如果shell不能被执行,则pclose()返回的终止状态与shell已执行exit一样。   type参数只能是读或者写中的一种,得到的返回值(标准I/O流)也具有和type相应的只读或只写类型。如果type是"r"则文件指针连接到command的标准输出;如果type是"w"则文件指针连接到command的标准输入。   command参数是一个指向以NULL结束的shell命令字符串的指针。这行命令将被传到bin/sh并使用-c标志,shell将执行这个命令。   popen(

shell脚本编程高级篇

徘徊边缘 提交于 2020-03-21 12:40:58
SHELL脚本编程进阶 循环执行:简单来说就是把一些指令重复循环。 循环代码具体的指令有三种: for , while , until其中for, while用的最多。 for循环 for 变量名 in 列表;do 循环体 done 关键字的帮助都是用help来查询。 for循环语法:在shell编程中 for,in,do,done。这些都是他的关键字,其中循环的指零就放在do和done之间。 WORDS决定了循环次数。 循环的次数由in 后面跟的WORDS(字符串)的数量决定。字符串的个数决定了do和done之间的指令执行的次数。 $ :for认为是一个整体 br/>$@:for认为是独立的参数 for循环逻辑:↓↓ :这条命令意思是,将i变量为1 22 33 等于说i同时等于这3个变量然后用到$i把变量显示出来第一次i就是1第二次i就是22第三次i就是333这就是for循环的逻辑。 :还可以使用花括号或字母一次性显示完。 for脚本编辑语法:,脚本意思是i变量为arg而$@是独立的一个整体执行为脚本后面跟123代表arg is 独立的123。 :这是重复创建10次用户的意思i变量为{1..10}这个范围 :这是让FILE变量为userlist.txt这个文件然后执行这个文件里有多少用户,在来循环多少次。 :不用创建脚本也可以在外执行for结尾必须使用;隔开done

编写 Shell 脚本的最佳实践

断了今生、忘了曾经 提交于 2020-03-18 04:38:56
转自: http://kb.cnblogs.com/page/574767/ 前言   由于工作需要,最近重新开始拾掇shell脚本。虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看。而且当我在看其他人写的脚本的时候,总觉得难以阅读。毕竟shell脚本这个东西不算是正经的编程语言,他更像是一个工具,用来杂糅不同的程序供我们调用。因此很多人在写的时候也是想到哪里写到哪里,基本上都像是一段超长的main函数,不忍直视。同时,由于历史原因,shell有很多不同的版本,而且也有很多有相同功能的命令需要我们进行取舍,以至于代码的规范很难统一。   考虑到上面的这些原因,我查阅了一些相关的文档,发现这些问题其实很多人都考虑过,而且也形成了一些不错的文章,但是还是有点零散。因此我就在这里把这些文章稍微整理了一下,作为以后我自己写脚本的技术规范。   代码风格规范   开头有“蛇棒”   所谓shebang其实就是在很多脚本的第一行出现的以”#!”开头的注释,他指明了当我们没有指定解释器的时候默认的解释器,一般可能是下面这样: #!/bin/bash   当然,解释器有很多种,除了bash之外,我们可以用下面的命令查看本机支持的解释器: $ cat /etc/shells #/etc/shells: valid login shells /bin/sh /bin/dash

shell内置变量

℡╲_俬逩灬. 提交于 2020-03-17 15:38:10
变量名 函数 $FUNCNAME 函数名称 $RANDOM 随机数 ${BASH_REMATCH[@]} 匹配正则表达式的列表 $0 脚本名称 $1~$n 脚本位置参数,10及以上表示为${10},shift进行偏移获取参数值 $@ 所有位置参数(列表) $* 所有位置参数(字符串) $# 位置参数的个数 $_ 上一条命令最后一个参数 $? 上条命令的返回值 $$ 脚本的PID $PPID 父进程ID $LINENO 脚本执行的行号 $PWD 当前目录 $SECONDS 脚本已经运行的时间(s) $TMOUT 超时退出时间(s) $UID 当前用户ID 来源: CSDN 作者: _Allen_Li 链接: https://blog.csdn.net/m0_37132242/article/details/104900539

Shell 脚本面试问题大全

两盒软妹~` 提交于 2020-03-16 11:59:36
1) 如何向脚本传递参数 ? ./script argument 例子 : 显示文件名称脚本 ./show.sh file1.txt cat show.sh #!/bin/bash cat $1 2) 如何在脚本中使用参数 ? 第一个参数 : 1 , 第 二 个 参 数 : 1,第二个参数:2 例子 : 脚本会复制文件(arg1) 到目标地址(arg2) ./copy.sh file1.txt /tmp/ cat copy.sh #!/bin/bash cp $1 $2 3) 如何计算传递进来的参数 ? $# 4) 如何在脚本中获取脚本名称 ? $0 5) 如何检查之前的命令是否运行成功 ? $? 6) 如何获取文件的最后一行 ? tail -1 7) 如何获取文件的第一行 ? head -1 8) 如何获取一个文件每一行的第三个元素 ? awk '{print $3}' 9) 假如文件中每行第一个元素是 FIND,如何获取第二个元素 awk '{ if ($1 == "FIND") print $2}' 10) 如何调试 bash 脚本 将 -xv 参数加到 #!/bin/bash 后 例子: #!/bin/bash –xv 11) 举例如何写一个函数 ? function example { echo "Hello world!" } 12) 如何向连接两个字符串 ? V1=

字符串操作的学习

故事扮演 提交于 2020-03-15 12:39:27
1、视频笔记 2、编写的代码列表 3、存在的问题 ①scanf函数与gets函数的区别是? 答:scanf函数不能读入空格或Tab,而gets函数可以。 ②shell的作用 答:它是交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令。shell遇到ctrl+c关闭程序,shell遇到ctrl+d输出EOF。 来源: https://www.cnblogs.com/szb1060131601/p/12494669.html

一个不错的shell 脚本教程

China☆狼群 提交于 2020-03-15 09:29:11
一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂! 建立一个脚本   Linux中有好多中不 同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样可以在 bash的大姐,bourne shell中运行)。   如同其他语言一样,通过我们使用任意一种文字编辑器,比如nedit、kedit、emacs、vi   等来编写我们的shell程序。   程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh   符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。   当编辑好脚本时,如果要执行该脚本,还必须使其可执行。   要使脚本可执行: chmod +x filename   然后,您可以通过输入: ./filename 来执行您的脚本。 注释   在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 变量   在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成

书写优雅的shell脚本(三) - shell中exec解析

▼魔方 西西 提交于 2020-03-15 08:19:41
  参考:《linux命令、编辑器与shell编程》 《unix环境高级编程》   exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类:外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。   在说明exe和source的区别之前,先说明一下fork的概念。   fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。 环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。 shell script: 有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell scripts;一种是在当前shell下执行,不再启用其他shell。

[100]shell中exec解析

我是研究僧i 提交于 2020-03-15 08:17:12
参考:《linux命令、编辑器与shell编程》 《unix环境高级编程》 本地变量可以理解为 局部变量 , 参考:shell基础 参考 bash shell的命令分为两类:外部命令和内部命令。 内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec,source等等。 外部命令是通过系统调用或独立的程序实现的,如sed、awk等。 set: 命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。 env: 环境变量 fork: 完成linux系统调用 fork是linux的系统调用,用来创建子进程(child process)。 子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。 子进程与父进程唯一不同的地方在于pid(process id)。 本地变量和环境变量的本质区别 环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。 执行shell的2种方法 shell script: 有两种方法执行shell scripts, 一种是新产生一个shell,然后执行相应的shell scripts;执行脚本. 一种是在当前shell下执行,不再启用其他shell。

Linux shell必知必会

我的梦境 提交于 2020-03-14 20:42:44
我个人很喜欢使用 Linux 系统,虽然说 Windows 的图形化界面做的确实比 Linux 好,但是对 脚本 的支持太差了。一开始有点不习惯 命令 行操作,但是熟悉了之后反而发现移动鼠标点点点才是浪费时间的罪魁祸首。那么对于 Linux 命令 行,本文不是介绍某些命令的用法,而是说明一些简单却特别容易让人迷惑的细节问题。 1、标准输入和命令参数的区别。 2、在后台运行命令在退出终端后也全部退出了。 3、单引号和双引号表示字符串的区别。 4、有的命令和sudo一起用就 command not found。 一、标准输入和参数的区别 这个问题一定是最容易让人迷惑的,具体来说,就是搞不清什么时候用管道符|和文件重定向>,<,什么时候用变量$。 比如说,我现在有个自动连接宽带的 shell 脚本 connect.sh,存在我的家目录: $ where connect.sh /home/fdl/bin/connect.sh 如果我想删除这个脚本,而且想少敲几次键盘,应该怎么操作呢?我曾经这样尝试过: $ where connect.sh | rm 实际上,这样操作是错误的,正确的做法应该是这样的: $ rm $(where connect.sh) 前者试图将where的结果连接到rm的标准输入,后者试图将结果作为命令行参数传入。