shell编程

编写Shell脚本的最佳实践

为君一笑 提交于 2020-03-14 03:43:10
from 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-13 11:37:11
Shell 脚本的第一行必须是如下格式: v #!/bin/sh 符号 #! 用来指定该脚本文件的解析程序。在上面 例子中使用 /bin/sh 来解析该脚本。当编辑好脚本 后,如果要执行该脚本,还必须使其具有可执行属性。 chmod +x filename 在 shell 编程中, 所有的变量都由字符串组成 , 并且不需要预先对变量进行声明 , 例 s1: #!/bin/sh #set variable a a="hello world" # print a echo "A is:" echo $a 有时候变量名很容易与其他文字混淆,比如: S13: num=2 echo "this is the $numnd“ 这并不会打印出 "this is the 2nd" ,而仅仅打印 "thisis the " ,因为 shell 会去搜索变量 numnd 的值,但是 这个变量时没有值的。可以使用花括号来告诉 shell 我 们要打印的是 num 变量: num=2 echo "this is the ${num}nd" 这将打印: this is the 2nd 默认变量 $# : 传入脚本的命令行参数个数 v $* : 所有命令行参数值,在各个参数值之间 留有空格 v $0 : 命令本身( shell 文件名) v $1 : 第一个命令行参数 v $2 : 第二个命令行参数 S2:

[转帖]你可能不知道的SHELL

删除回忆录丶 提交于 2020-03-13 08:05:29
你可能不知道的SHELL https://coolshell.cn/articles/8619.html 2012年11月23日 404null 评论 146 条评论 108,187 人阅读 Shell也叫做命令行界面,它是*nix操作系统下用户和计算机的交互界面。Shell这个词是指操作系统中提供访问内核服务的程序。 这篇文章向大家介绍Shell一些非广为人知、但却实用有趣的知识,权当品尝shell主食后的甜点吧。 科普 先科普几个你可能不知道的事实: Shell几乎是和Unix操作系统一起诞生,第一个Unix Shell是肯·汤普逊(Ken Thompson)以Multics上的Shell为模范在1971年改写而成,并命名Thompson sh。即便是后来流行的bash(shell的一种变体),它的年龄实际上比当前流行的所有的Linux kernel都大,可谓在Linux系统上是先有Shell再有Kernel。 当前绝大部分*nix和MacOS操作系统里的默认的Shell都是bash,bash由Brian Fox在1987年创造,全称Bourne Again shell ( bash)。 你或许听说除了bash之外,还有Bourne shell ( sh),Korn shell ( ksh),C shell (包括 csh and tcsh)

shell编程(二)

余生颓废 提交于 2020-03-12 02:21:25
Shell程序的的变量及参数 在shell程序中,数据用变量来存储,使用变量时不需要声明,默认所有变量类型为字符串类型. 这里$*,"$@"和$@的效果是一样的. 使用 set 设置位置参数. 形如 set $( ls -l ) 这样的命令则会把ls -l的结果以此作为他的参数. 常见的环境变量 环境变量 说明 $HOME 当前用户主目录 $PATH 用以搜索命令的目录列表,用:分隔 $PS1 命令提示符,通常是用$.root用户则是# $PS2 二级提示符,用来提示后需输入,通常是> $IFS 内部与分隔符 变量的声明 在shell中,使用一般变量可以不用声明,可对于一些特殊变量需要声明. 声明格式: declare [ options ] [ name = [ value ] ] typeset [ options ] [ name = [ value ] ] #unset用于删除shell变量 unset name 常用选项options: -a 声明一个数组array -f 声明一个函数function -i 声明一个整数integer -r 声明只读变量readonly -x 声明全局变量,可供子进程使用 注:赋值语句中,等号前后不能有空格.   整型变量不可以被赋非整型的值    set用于查看本地定义的shell变量 变量引用 echo $ {name:-string

-Shell 教程 Bash 脚本 基础语法 MD

余生长醉 提交于 2020-03-10 18:03:37
目录 目录 Shell 简介 Shell 脚本 Shell 环境 第一个shell脚本 Shell 变量 定义变量 使用变量 只读变量 删除变量 Shell 字符串 单引号 双引号 字符串基本操作 Shell 数组 定义数组 数组的基本操作 Shell 注释 Shell 传递参数 特殊字符处理参数 $* 与 $@ 的异同点 Shell 基本运算符 算术运算符 关系运算符 布尔运算符 逻辑运算符 字符串运算符 文件测试运算符 Shell echo 命令 Shell printf 命令 格式替代符 使用案例 printf 的转义序列 Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com 目录 Shell 简介 Shell 是一个用 C 语言 编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种 命令语言 ,又是一种 程序设计语言 。 Shell 是指一种 应用程序 ,这个应用程序提供了一个 界面 ,用户通过这个界面访问 操作系统内核的服务 。 Ken Thompson 的 sh 是第一种 Unix Shell, Windows Explorer 是一个典型的 图形界面 Shell 。 Shell 脚本 Shell 脚本

三十八、SHELL编程

久未见 提交于 2020-03-09 13:29:13
1、介绍 SHELL是基于C语言开发的软件程序,默认是置于Linux内核的外层,Linux系统启动之后,会在Linux内核外层,装载一层外壳,这个外壳称为SHELL。SHELL外壳程序是位于用户使用者和Linux内核之间的,主要是用于接收用户输入的指令,并且解析命令,最终将解析之后的指令发给Linux内核,Linux内核处理完成之后,会将处理的结果返回给SHELL,SHELL会对Linux内核返回数据做解释(翻译),最终将翻译之后的信息返回给用户。Linux操作系统启动之后,使用用户和密码登录,默认会登录到SHELL终端上,用户所有的操作都是在SHELL终端来执行。 常见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) 2、变量 Shell编程是非类型的解释型语言,不像C++、JAVA语言编程时需要事先声明变量。Shell给一个变量赋值,实际上就是定义了变量。在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值。Shell变量为弱类型,定义变量不需要声明类型,但在使用时需要明确变量的类型。可以使用Declare指定类型

Linux系统结构详解(转)

試著忘記壹切 提交于 2020-03-09 12:58:37
Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序 。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。 1. linux内核 Linux内核是世界上最大的开源项目之一,内核是与计算机硬件接口的易替换软件的最低级别。它负责将所有以“用户模式”运行的应用程序连接到物理硬件,并允许称为服务器的进程使用进程间通信(IPC)彼此获取信息。 内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图: 系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。 1. 内存管理 对任何一台计算机而言,其内存以及其它资源都是有限的。为了让有限的物理内存满足应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。Linux 将内存划分为容易处理的“内存页”

Jshell 工具的介绍

故事扮演 提交于 2020-03-07 21:57:33
Jshell shell是脚本程序的含义,为了方便代码开发,都会提供有shell的交互式编程环境。 提供shell指令可以直接运行,jdk1.9以后才有的功能   可以在jshell程序之中进行程序编写,也可以将一些内容交由程序保存    只需编写核心结构代码即可,减少了对结构化的需求/exit,交互式环境的推出    有时可以用来验证一些函数比较方便 来源: https://www.cnblogs.com/shitulaoma/p/12437346.html

Linux Shell 命令总结

扶醉桌前 提交于 2020-03-07 20:32:54
1. 前言 本文介绍了常用的Linux shell命令,包括date、cut、sort、uniq、sed、vi、diff、find等,同时给出尽可能使用的实例以便于理解。 2. Linux shell命令 2.1 date 作用:获取或者设置日期 用法:date [选项] 显示时间格式(以+开头,后面接格式) 举例: (1) 以固定格式显示时间:date + “%Y%m%d%H” (2) 显示明天的日期:date -d “tomorrow” +”%Y-%m-%d” (3) 显示前天的日志:date -d “1 days ago” +”%Y-%m-%d” 2.2 cut 作用:从输入文件或者命令的输出中析取出各种域 用法:cut –c{字符串范围} –d{字段间分割符} –f{字段索引编号} 举例: (1)查看在线用户:who | cut –c1-8 (2)从系统文件/etc/passwd中获取用户名列表:cut –d: -f1 /etc/passwd 2.3. paste 作用:将多个域合并 用法:cut –d{字段间分割符} 举例: paste –d’:’ filename1 filename2 2.4. sort 作用:排序 用法: -t 指定分隔符, 默认为空格 -r 以降序来排列 -u 去掉重复行 -d 以字典序来排列,包括字母,数字,符号等 -n 以数字序来排列

编写Shell脚本的最佳实践

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