shell编程

shell脚本学习

拟墨画扇 提交于 2020-03-25 02:54:18
shell是一种脚本语言,和windows中的bat性质上差不多 1-1shell入门 在编写shell脚本程序中首先需要接触到的就是约定标记,这个约定标记表示使用什么解释器进行执行。 ps:解释器:解释器就是对shell程序使用的哪个东西后进行解释执行的语句 一个简单的shell程序如下 #!/bin/bash echo "Hello World !" 上述代码执行以后直接在控制台中显示以下代码 Hello World ! 在本代码中的 #! 是一个约定的标记,表示使用bash解释器来执行。使用的就是bash版本的shell脚本 sh/bash/csh/Tcsh/ksh/pdksh等shell的区别 sh(全称 Bourne Shell) : 是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。 Bourne Shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种 shell。 bash(全称 Bourne Again Shell) : LinuxOS 默认的,它是 Bourne Shell 的扩展。 与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基础上增加了很多特性。可以提供命令补全,命令编辑和命令历史等功能。它还包含了很多 C Shell 和 Korn Shell 中的优点,有灵活和强大的编辑接口

Linux Shell编程case语句

烂漫一生 提交于 2020-03-22 04:33:42
http://blog.csdn.net/dreamtdp/article/details/8048720 case语句使用于需要进行多重分支的应用情况 格式: case $变量名 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; *) 默认执行的命令序列 ;; esac case语句结构特点如下: case行尾必须为单词 in 每个模式必须以右括号 ) 结束 双分号 ;; 表示命令序列结束 case语句结构特点如下: 匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。 最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列。 case语句实例:由用户从键盘输入一个字符,并判断该字符是否为字母、数字或者其他字符, 并输出相应的提示信息。 #!/bin/bash read -p "press some key ,then press return :" KEY case $KEY in [a-z]|[A-Z]) echo "It's a letter." ;; [0-9]) echo "It's a digit." ;; *) echo "It's function keys、Spacebar or other ksys." esac ################################

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

Linux Shell编程第5章——文件的排序、合并和分割

孤人 提交于 2020-03-21 07:42:48
目录 sort命令 sort命令的基本用法 uniq命令 join命令 cut命令 paste命令 split命令 tr命令 tar命令 sort命令 sort命令是Linux系统一种排序工具,它将输入文件看作由多条记录组成的数据流,而记录由可变宽度的字段组成,以换行符为定界符。sort命令与awk类似,可将记录分成多个域来处理,默认的域分隔符是空格符,域分隔符也可由用户指定。sort命令的基本格式如下: sort [选项] [输入文件] 常用sort命令选项及其意义如下: 选项 意义 -c 测试文件是否已经被排序 -k 指定排序的域 -m 合并两个已排序的文件 -n 根据数字大小进行排序 -o [输出文件] 将输出写到指定的文件,相当于将输出重定向到指定文件 -r 将排序结果逆向显示 -t 改变域分隔符 -u 去除结果中的重复行 sort命令的基本用法 1. -t选项 sort命令是分域对文件进行排序的,默认的域分隔符是空格符,-t选项可用于设置分隔符。下面看一个例子,新建一个CARGO.db的文件,用于记录笔记本品牌、产地、价格、年代、型号等信息,各域间用冒号分隔。 $ cat CARGO.db ThinkPad:USA:14000:2009:X301 ThinkPad:HongKong:10000:2008:T400 ThinkPad:USA:8000:2007:X60 HP

Linux中的shell命令

感情迁移 提交于 2020-03-18 15:21:31
某厂面试归来,发现自己落伍了!>>>  命令行   用户登录到 Linux系统 时,可以看到一个shell提示符,标识了命令行的开始.用户可以在提示符后面输入任何命令及参数.例如:   $ date   二 11 23 01:34:58 CST 1999   $   用户登录时,实际进入了shell,它遵循一定的语法将输入的命令加以解释并传给系统.命令行中输入的第一个字 是一个命令的名字,第二个字是命令的选项或参数,命令行中的每个字 由空格或TAB隔开,格式如下:   $ Command Option Arguments   选项和参数   选项是包括一个或多个字母的代码,它前面有一个减号(减号是必要的,Linux用它来区别选项和参数),选项可用于改变命令执行的动作的类型.例如:   $ ls   motd passwd   $   这是没有选项的ls命令,可列出当前目录中所有文件,只列出各个文件的名字,而不显示其他更多的信息.   $ ls -l   total 2   -rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd   -rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd   $   加入-l选项,将会为每个文件列出一行信息,诸如数据大小和数据 被修改的时间.   大多数命令都被设计为可以接纳参数

编写 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 脚本教程

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。

shell中exec解析

﹥>﹥吖頭↗ 提交于 2020-03-15 08:18:13
  参考:《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。