shell编写总结
变量引用
- $(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编写总结的更多相关文章
- Linux shell编写脚本部署pxe网络装机
Linux shell编写脚本部署pxe网络装机 人工安装配置,Linux PXE无人值守网络装机 https://www.cnblogs.com/yuzly/p/10582254.html 脚本实 ...
- Shell编写字符菜单管理-8
第8章 Shell编写字符菜单管理 一.shell函数定义function menu(){ echo 'this is a func!!';} 二.shell函数使用menu 三.cat命令的here ...
- Linux shell编写端口扫描脚本
Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...
- 树莓派(Raspberry Pi)使用Shell编写的极简Service
树莓派(Raspberry Pi)运行的系统是基于Debian的,不仅可以运行Shell,还支持systemd和docker,可以编写一个简单的服务,让其在启动时运行,执行一些自动化的操作.这里在Ra ...
- Shell编写8点建议
这八个建议,来源于键者几年来编写 shell 脚本的一些经验和教训.事实上开始写的时候还不止这几条,后来思索再三,去掉几条无关痛痒的,最后剩下八条.毫不夸张地说,每条都是精挑细选的,虽然有几点算是老生 ...
- linux 下shell 编写脚本
linux 下shell 编写脚本: 1.程序结构练习:编写一个脚本,给定一个正整数,计算出这个数所有位的数字之和. 例如:程序给定输入123,那么应该返回1+2+3=6. 2.程序结构练习:编写一个 ...
- shell编写一个批量添加用户脚本
shell编写一个批量添加用户脚本 5.1问题 本例要求在虚拟机server0上创建/roo ...
- shell编写一个判断脚本
shell编写一个判断脚本 4.1问题 本例要求在虚拟机server0上创建/roo ...
- shell编写mysql备份工具
如需转载,请经本人同意. 这是之前写的一个备份脚本,调用的备份工具是xtrabackup 编写思路是:每周一全备份,备份后提取lSN号,对备份文件进行压缩,其余时候在LSN的基础上进行增量备份,并对3 ...
- IBM AIX Shell编写遭遇错误一2
在IBM AIX 5.3平台上,编写一个shell的时候遇到几个错误. 0. exp: 0403-027 The parameter list is too long 看这个提示是说命令行长度太长了, ...
随机推荐
- angular2中的路由转场动效
1.为什么有的人路由转动效离场动效不生效? 自己研究发现是加动效的位置放错了 如下: <---! animate-state.component.html --> <div sty ...
- String类的subString(a,b)方法(基于jdk 1.9)
基于上文:http://www.jianshu.com/p/a20ee3bb9c1b public String substring(int beginIndex, int endIndex) { i ...
- spring mvc:练习 @RequestParam(参数绑定到控制器)和@PathVariable(参数绑定到url模板变量)
spring mvc:练习 @RequestParam和@PathVariable @RequestParam: 注解将请求参数绑定到你的控制器方法参数 @PathVariable: 注释将一个方法参 ...
- ItemsControl的ItemContainerStyle属性
ItemsControl:ListBox,ComboBox,TreeView ItemContainerStyle是用来设置每一个集合控件的Item的样式的属性(即设置每一个项的样式). 使用It ...
- java开发中的重中之重-------mysql(基础篇)
介绍: mysql是目前世界上最流行的关系型数据库,在国内大的互联网公司都在使用mysql数据库,mysql经常被我们这样概述,“mysql是轻量级关系型数据库”,其实轻量级并不是说mysql是中小型 ...
- poj-2342-简单树形dp
Anniversary party Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10388 Accepted: 594 ...
- buffer与cache的区别
top命令中有两项与内存相关的东西:buffer和cache.这两项与页高速缓存相关.磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的. 在linux内 ...
- 不使用构造方法创建Java对象: objenesis的基本使用方法
转载:http://blog.csdn.net/codershamo/article/details/52015206 objenesis简介: objenesis是一个小型Java类库用来实例化一个 ...
- GPON命令模式
1.添加ont步骤 1.1 查看自动发现的ONT,并记录SN号和PON口 MA5680T(config)#display ont autofind all --------------------- ...
- ASP.NET MVC TryUpdateModel 更新model
总结参考:原文地址http://www.it165.net/pro/html/201305/5724.html TryUpdateModel (model)默认将view页面上form表单中的字段与m ...