变量引用

  • $(VAR): 会将VAR当做一条命令来执行
  • '$VAR': 单引号中包含的变量, 不会被引用, 仍然输出$VAR
  • "$VAR": 双引号中包含的变量, 会被引用成$VAR的值输出
  • ``: 优先执行其中的命令, 用在字符串中时, 仅在""当中有效

有时需要在一个字符串变量中定义一个命令并预先包含一个变量名, 在使用时再转换成变量名, 此时可通过eval命令来达到目的.

CMD='eval echo $VALUE'
VALUE="Hello" $CMD
# 执行echo "Hello", 输出"Hello"

特殊变量

  • $0: 获取当前执行脚本的文件名,包括路径
  • $n: 获取当前执行的shell脚本的第N个参数, n=1..9, 当n为0时表示脚本的文件名, 如果n大于9, 可用大括号括起来如${10}
  • $@: 这个程序的所有参数"$1" "$2" "$3"..., 这是将参数传递给其他程序的最佳方式, 因为会保留所有内嵌在每个参数里的空白
  • $*: 获取当前shell的所有参数,会将所有的命令行参数视为单个字符串
  • $?: 代表上一个命令执行是否成功的标志,如果执行成功则$? 为0, 否则不为0
  • $#: 获取当前shell命令行中参数的总个数
  • $_: 代表上一个命令的最后一个参数
  • $$: 代表所在命令的PID
  • $!: 代表最后执行的后台命令的PID

日志输出

shell脚本开发中, 输出的语句尽量不出现在标准输出, 除非是少数的步骤提示性语句, 如果是出错信息, 应存入到自己定义的出错日志中, 以便后期维护和调试, 其它不关心的信息直接输出到/dev/null中. 否则输出信息过多, 容易耗尽缓存, 造成脚本运行卡死, 难以调试定位.

  • date: 显示日期时间的命令, 可通过此命令来作为日志的前缀, 方便定位. 一般形式为 "[ date +%Y%m%d-%H%M%S` ]"
  • &[n]: 代表已经存在的文件描述符, &1代表输出, &2代表错误输出, &-代表关闭与它绑定的描述符, 如2>&1 错误输出绑定到标准输出, 2>&- 等价于2>/dev/null

条件判断

使用[ ]判断

注意事项

[ $HOME == $MALL ]

  • [ ]中每个组件都需要空格键来分格, 其中的变量最好都以双引号括起来, 常量最好都以单或双括起来
  • [ ]中==和'='结果都完全一样, 习惯上可尽量使用==
常用参数

数值比较

  • -ne: 比较两个参数是否不相等
  • -lt 参数1是否小于参数2
  • -le 参数1是否小于等于参数2
  • -gt 参数1是否大于参数2
  • -ge 参数1是否大于等于参数2
  • -n:判断变量是否有值

文件比较

  • -f 检查某文件是否存在
  • -d 检查目录是否存在
  • -x:判断是否存在并有可执行权限
  • -d: 文件为目录为真
  • -c: 文件为字符特殊文件为真
  • -b: 文件为块特殊文件为真
  • -s: 文件大小非0时为真
  • -t: 当文件描述符(默认为1)指定的设备为终端时为真

权限比较

  • -r: 用户可读为真
  • -w: 用户可写为真
  • -x: 用户可执行为真

shell编写总结的更多相关文章

  1. Linux shell编写脚本部署pxe网络装机

    Linux shell编写脚本部署pxe网络装机 人工安装配置,Linux PXE无人值守网络装机  https://www.cnblogs.com/yuzly/p/10582254.html 脚本实 ...

  2. Shell编写字符菜单管理-8

    第8章 Shell编写字符菜单管理 一.shell函数定义function menu(){ echo 'this is a func!!';} 二.shell函数使用menu 三.cat命令的here ...

  3. Linux shell编写端口扫描脚本

    Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...

  4. 树莓派(Raspberry Pi)使用Shell编写的极简Service

    树莓派(Raspberry Pi)运行的系统是基于Debian的,不仅可以运行Shell,还支持systemd和docker,可以编写一个简单的服务,让其在启动时运行,执行一些自动化的操作.这里在Ra ...

  5. Shell编写8点建议

    这八个建议,来源于键者几年来编写 shell 脚本的一些经验和教训.事实上开始写的时候还不止这几条,后来思索再三,去掉几条无关痛痒的,最后剩下八条.毫不夸张地说,每条都是精挑细选的,虽然有几点算是老生 ...

  6. linux 下shell 编写脚本

    linux 下shell 编写脚本: 1.程序结构练习:编写一个脚本,给定一个正整数,计算出这个数所有位的数字之和. 例如:程序给定输入123,那么应该返回1+2+3=6. 2.程序结构练习:编写一个 ...

  7. shell编写一个批量添加用户脚本

                                                          shell编写一个批量添加用户脚本 5.1问题 本例要求在虚拟机server0上创建/roo ...

  8. shell编写一个判断脚本

                                                              shell编写一个判断脚本 4.1问题 本例要求在虚拟机server0上创建/roo ...

  9. shell编写mysql备份工具

    如需转载,请经本人同意. 这是之前写的一个备份脚本,调用的备份工具是xtrabackup 编写思路是:每周一全备份,备份后提取lSN号,对备份文件进行压缩,其余时候在LSN的基础上进行增量备份,并对3 ...

  10. IBM AIX Shell编写遭遇错误一2

    在IBM AIX 5.3平台上,编写一个shell的时候遇到几个错误. 0. exp: 0403-027 The parameter list is too long 看这个提示是说命令行长度太长了, ...

随机推荐

  1. Angular中form表单中input自动响应回车事件无效

    环境:angular.js 问题:当你在input框中输入搜索信息,然后回车键,信息消失而且也没有执行查询??? 原因:组合查询的代码不是<button ng-click="ch()& ...

  2. pandas dataframe在指定的位置添加一列, 或者一次性添加几列,re

    相信有很多人收这个问题的困扰,如果你想一次性在pandas.DataFrame里添加几列,或者在指定的位置添加一列,都会很苦恼找不到简便的方法:可以用到的函数有df.reindex, pd.conca ...

  3. vue iview组件表格 render函数的使用

    如果要在标签中加入属性,例如img 中src属性 a标签中href属性 此时需要用到 attrs 来加入而不是props { title: '操作', key: 'action', align: 'c ...

  4. maven-surefire-plugin的forkMode分析

    Maven运行测试用例时,是通过调用maven的surefire插件并fork一个子进程来执行用例的.forkmode属性中指明是要为每个测试创建一个进程,还是所有测试在同一个进程中完成. <p ...

  5. java开发中beancopy比较

    在java应用开发过程中不可避免的会使用到对象copy属性赋值. 1.常用的beancopy工具 组织(包) 工具类 基本原理 其他 apache PropertyUtils java反射     B ...

  6. Chrome浏览器最小字体12px限制问题解决方法

    问题描述: 页面宽度有限的情况下显示大数据,采用font-size:8px来压缩字体大小,版本 25.0.1547.66及以下版本的chrome浏览器没有问题,后续版本的就不可以了: 问题原因: 浏览 ...

  7. hdu 1079 Calendar Game sg函数 难度:0

    Calendar Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  8. cf 915

    t1:2分钟ac,简单模拟 t2:3发wa,最后再10分钟的时候过了 但是最后被hack了 t3:2发wa,最后还是被hack了 t4:拓扑排序 然后将一个点入度减一 然后是否能拓扑 t5:离散化+线 ...

  9. 辛星笔记——VIM学习篇(推荐阅读)

    转载自:辛星和您一起学vim脚本第一节 如本文侵犯了您的版权,请联系windeal12@qq.com 这几天在网上看了辛星的一些vim教程博文,觉得很有收获,也很实用,适合入门,所以转载其中一篇留个网 ...

  10. ImportError: liblapack.so.3: cannot open shared object file问题

    问题: 安装完tensorflow后,在终端输入: python import cv2 出现如下错误: ImportError: liblapack.so.3: cannot open shared ...