shell的建议

指定bash

shell脚本第一行, #! 应该是什么?

大多数情况 /usr/bin/env bash,  /bin/bash, /usr/bin/bash, /bin/sh, /usr/bin/env sh 是等价的,但是少数情况还是有坑。如默认的shell 可能不是 bash,如某个发行法本,默认sh不是bash。

所以推荐使用 /bin/bash

set -e 和 set -x

在具体的代码逻辑之前,先插入 一行 set -e 和 一行 set -x

set -x 会在执行每一行 shell 脚本的时候,将执行的内容输出来。所有涉及的变量都会被替换成实际的值。

set -e 会在执行出错时结束程序。(但是不是所有出错的时候都会结束程序)。

带上shellcheck

shellcheck 可以查错

注意local

写函数的时候,如果 不加 local 限定词,那么变量默认就是全局的,这和js差不多。

在顶级作用域中,是否全局没有多大影响,但是在函数中,一个全局变量就有可能污染其他作用域。所以在函数中声明的变量,一定要加上 local 限定词

复杂的逻辑还是避开shell

shell 写脚本往往就是难以移植,难以统一进行错误处理,难以利索的处理数据。所以需要配合很多外部的命令,如 grep,sed,awk 来处理。所以解决特定问题还是需要特定的工具,切换一门更通用的脚本语言,有时候更好。

时间: 2024-08-28 01:13:23

shell的建议的相关文章

shell、cmd、dos和脚本语言区别和联系

问题一:DOS与windows中cmd区别   在windows系统中,"开始-运行-cmd"可以打开"cmd.exe",进行命令行操作. 操作系统可以分成核心(kernel)和Shell(外壳)两部分,其中,Shell是操作系统与外部的主要接口,位于操作系统的外层,为用户提供与操作系统核心沟通的途径.在windows系统中见到的桌面即explorer.exe(资源管理器)是图形shell,而cmd就是命令行shell.这算是cmd与dos的最大区别,一个只是接口.

执行shell命令的函数——system()、popen()

1.FILE* popen(const char* cmd,const char* type); int pclose(FILE* stream); popen()函数fork()一个子进程,创建管道用于父子进程间通信,父进程要么从管道读,要么往管道写,执行一个shell以运行命令来开启一个进程 相比于system()的又是在于使用简单,popen()只返回两个值,成功返回子进程的status,失败返回-1 2.int system(const char* cmd); 处理了fork().exe

Shell Sort(希尔排序)

近日学习了Shell Sort,也就是希尔排序,也称递减增量排序算法.在1959年由DL.Shell提出于1959年提出,由此得名. 此版本算法是在插入排序(Insertion Sort)基础上,将数组分成了h份(gap).也就是在数组中每隔h个数取出一个数,为一个子数组.先在子数组上进行排序,然后不断减小h的大小,直到h == 1 时,也就是完全变成插入排序的时候,排序完成. 算法复杂度取决于h(步长/步进)的选择,在最差的时候,也就是h == 1的时候,希尔排序就变成了插入排序,复杂度为O(

数据结构杂谈(一)浅谈基本排序算法

0.基本概念 记录:待排序的项目 关键词:决定排序结果 稳定性:相同关键词的记录保持原来的相对次序 1.1插入排序(Insertion Sort) 算法思想 一种简单直观的排序算法,工作原理是通过构建有序序列:对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法描述 具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素(已排序)大于新元素,将该元素移到下一位置 重复步骤3,直到找到已排序的元素小于或者等于

Hive部署及优化配置

1.1安装 1.Hive依赖hadoop环境,所有在装之前要先安装hadoop,hive一般安装在hadoop的NameNode节点上面: 2.下载 Hive最新Release版(0.7.1 ) http://www.apache.org/dyn/closer.cgi/hive/ 3.将压缩安装包解压至一目录,如/home/hadoop/hive 4.配制metadata存放方式 默认metadatga是存放在derby里,这种方式不允许多个用户同时登陆hive shell,所有建议用mysql

8大排序算法-我熟知二(希尔、选择)

3.希尔排序(递减增量排序算法)不稳定的-- - - 直接插入排序的改进  .复杂度介于O(nlog^2n)~ O(n),空间是O(n) 基于插入排序的两点性质: 1.对于几乎已排好序的数组效率高,可达到线性 2.但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位 方法:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序,可以让一个元素可以一次性地朝最终位置前进一大步.然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够

linux实训

目  录 Unit 1 操作系统安装.... 3 1.1 多操作系统安装... 3 1.1.1 VMware简介... 3 1.1.2 VMWare基本使用... 4 1.2 安装Red Hat Linux 9.0. 15 1.3 思考题... 15 [实习报告]... 16 Unit 2  Linux命令接口使用.... 17 2.1 访问Linux系统... 17 2.1.1 创建用户组... 17 2.1.2 删除用户组... 17 2.1.3 创建用户... 18 2.1.4 删除用户.

基本排序算法的Python实现

本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序,希尔排序,归并排序,快速排序,堆排序,计数排序.希望大家回顾知识的时候也能从我的这篇文章得到帮助. 为了防止误导读者,本文所有概念性内容均截取自对应Wiki 冒泡排序 原理 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢

Spark in action Spark 以及SparkR的安装配置说明

Spark以及SparkR的安装(standalone模式) From :ssdutsu @ Inspur Company  [email protected] 操作系统 CentOS 7 Java 版本 JDK 1.7 Spark安装过程请见PDF文件 Spark 1.0的安装配置文件 网址:http://www.it165.net/admin/html/201407/3379.html (别忘了配置免密码登陆和关闭防火墙) 下面重点描述如何在linux环境下安装R,Rstudio 以及Spa