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-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之打印菜单方法实例

狂风中的少年 提交于 2020-03-11 16:50:49
方法1 #!/bin/bash #Author:mcsiberiawolf #Time:2019-02-12 11:15:49 #Name:menu.sh #Version:V1.0 #Description: This is a test script. RETVAR=0 # 定义脚本路径 path=/server/scripts # 如果路径不存在就创建 [ -d "$path" ] && mkdir -p $path # 定义帮助函数 function Usage(){ echo "Usage:$0 argv" return 1 } # 定义安装服务函数 function InstallService(){ if [ $# -ne 1 ]; then Usage fi local RETVAR=0 echo "start installing ${1}." sleep 2 if [ ! -x "$path/${1}.sh" ]; then echo "$path/${1}.sh does not exist or can not be exec." return 1 else $path/${1}.sh return $RETVAR fi } # 定义主函数 function main(){ # 菜单提示 PS3="`echo Pls input the num you

-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 17:19:34
前言: 在Linux平台上工作,我们经常需要使用shell来编写一些有用、有意义的脚本程序。shell数组并不常用到,因为它仅支持弱类型的一维数组,但在某些情况下,它非常的有用。那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解,shell中的数组。 数组的定义 何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合(不包括有一些编程语言提出来的关联数组的概念)。那么shell中数组是怎么定义的呢,我们来看两种数据类型:一是数值类型,二是字符串类型;虽然shell本身是弱类型的,但也可以这么区分。 数值类型的数组 :一对括号表示数组,数组中元素之间使用“空格”来隔开。 举个列子: arr_number = ( 1 2 3 4 5 ) ; 字符串类型数组 :同样,使用一对括号表示数组,其中数组中的元素使用双引号或者单引号包含,同样使用“空格”来隔开。 arr_string = ( "abc" "edf" "sss" ) ; 或者 arr_string = ( 'abc' 'edf' 'sss' ) ; 数组的操作   我们使用数值类型数组arr_number=(1 2 3 4 5)做为源数组进行相关的讲解:获取数组长度,读取某个下标的值,对某个下标赋值,删除、分配和替换以及遍历。提一个知识点,我们在shell里面想获取某个变量的值

Linux的Login Shell & Non-Login shell

你说的曾经没有我的故事 提交于 2020-03-09 14:51:19
登录脚本的执行顺序:【注:仅适用于 bash shell】 Login Shell 是指登录时,需要提供用户名密码的shell,如:su – user1 , 图形登录, ctrl+alt+F2-6进入的登录界面。 这种Login shell 执行脚本的顺序: 1. /etc/profile 【全局profile文件;它定义了LoginUser的 PATH, USER, LOGNAME(登录使用者帐号)】 2. /etc/profile.d/目录下的脚本 3. ~/.bash_profile 【搜索命令的路径 ——————- 登录级别 环境变量配置文件 】 4. ~/.bashrc 【存储用户设定的别名和函数 ———- shell级别 环境变量配置文件】 5. /etc/bashrc 【全局bashrc文件; 它主要定义一些 Function 和 Alias;更改/etc/bashrc会影响到所有用户,由root用户管理。】 Non-Login shell 登录终端后,使用ssh 登录 其他机器! 非登录shell指的是,不需要输入用户名密码的shell,如图形下 右键terminal,或ctrl+shift+T打开的shell 这种Non-Login shell 执行登录脚本的顺序: 1. ~/.bashrc 2. /etc/bashrc 3. /etc/profile.d

三十八、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指定类型

大数据学习第4天

纵然是瞬间 提交于 2020-03-09 07:44:36
大数据学习第四天 pstree 查看当前进程结构 source 加载文件 在当前bash . 在当前bash运行脚本 bash 相当于浏览器加cmd chomd +x 把文件变为可执行文件 #! /路径 在文件首行指定运行编译/解释器 不写时默认bash #! 注释的行会在第一次读取时直接运行 yum serch 查询yum情况 文件输出类型 0 标准输入 1 标准输出 2 错误输出 可以用于多种结果的不同输出 正常结果 1>/路径 错误结果 2>/路径 配置service服务文件 /etc/init.d/ chkconfig nn 运行模式 1-6 nn 运行优先级 nn 关机级别 vi 模式下 末行 set ts设置缩进距离 在脚本中'命令行' 变量名='cat 文件名'赋值 获取文件内容赋值变量 bash -x debug运行 ps -aux 查看所有进程 chkconfig 所有服务的配置情况 --list 查看所有服务的配置启用情况 $(变量名)字符串 变量字符串拼接 子bash执行指令时直接继承父bash环境(变量 运行环境...) 子bash执行文件时不会继承父bash的值 & 后台运行 | 管道创建子进程时会全部继承父bash的值 ' ' 强引用 完全引用 "" 弱引用 while 后面必须跟一个命令 比如test du -h 查看文件夹下文件大小 $IFS

Jshell 工具的介绍

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

编写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