shell 函数与内置变量
1,特殊shell变量
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$_ 显示传参的最后一个参数
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。
$ command > /dev/null
/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
如果希望屏蔽 stdout 和 $ command > /dev/null 2>&1
$0 脚 本名字
$1 位置参数 #1
$2 - $9 位置参数 #2 - #9
${10} 位置参数 #10
$# 位置参数的个数
"$*" 所有的位置参数(作为单个字符串) *
"$@" 所有的位置参数(每个都作为独立的字符串)
${#*} 传递到脚本中的命令行参数的个数
${#@} 传递到脚本中的命令行参数的个数
$? 返回值
$$ 脚本的进程ID(PID)
$- 传递到脚本中的标志(使用set)
$_ 之前命令的最后一个参数
$! 运行在后台的最后一个作业的进程ID(PID)
2,二元比较
-eq 等于
= 等于
== 等于
-ne 不等于
!= 不等于
-lt 小于
\< 小于 (ASCII) *
-le 小于等于
-gt 大于
\> 大于 (ASCII) *
-ge 大于等于
-z 字符串为空
-n 字符串不为空
> 大于
>= 大于等于
< 小于
<= 小于等于
3,文件测试类型
-e 文件是否存在
-s 文件大小不为0
-f 是一个标准文件
-d 是一个目录
-r 文件具有读权限
-w 文件具有写权限
-x 文件具有执行权限
-h 文件是一个符号链接
-L 文件是一个符号链接
-b 文件是一个块设备
-c 文件是一个字符设备
-g 设置了sgid标记
-p 文件是一个管道
-u 设置了suid标记
-S 文件是一个socket
-k 设置了"粘贴位"
-t 文件与一个终端相关联
-N 从这个文件最后一次被读取之后, 它被修改过
-O 这个文件的宿主是你
-G 文件的组id与你所属的组相同
F1 -nt F2 文件F1比文件F2新 *
F1 -ot F2 文件F1比文件F2旧 *
F1 -ef F2 文件F1和文件F2都是同一个文件的硬链接 *
! "非" (反转上边的测试结果)
4,参数替换和扩展
表达式 含义
${var} 变量var的 值, 与$var相同
${var-DEFAULT} 如果var没 有被声明, 那么就以$DEFAULT作为其值 *
${var:-DEFAULT} 如果var没 有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *
${var=DEFAULT} 如果var没 有被声明, 那么就以$DEFAULT作为其值 *
${var:=DEFAULT} 如果var没 有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *
${var+OTHER} 如果var声 明了, 那么其值就是$OTHER, 否则就为null字符串
${var:+OTHER} 如 果var被设置了, 那么其值就是$OTHER, 否则就为null字符串
${var?ERR_MSG} 如果var没 被声明, 那么就打印$ERR_MSG *
${var:?ERR_MSG} 如果var没 被设置, 那么就打印$ERR_MSG *
${!varprefix*} 匹配之前所有以varprefix开头进行声明的变量
${!varprefix@} 匹配之前所有以varprefix开头进行声明的变量
${#string} $string的 长度
${string:position} 在$string中, 从位置$position开始提取子串
${string:position:length} 在$string中, 从位置$position开始提取长度为$length的子串
${string#substring} 从 变量$string的开头, 删除最短匹配$substring的子串
${string##substring} 从 变量$string的开头, 删除最长匹配$substring的子串
${string%substring} 从 变量$string的结尾, 删除最短匹配$substring的子串
${string%%substring} 从 变量$string的结尾, 删除最长匹配$substring的子串
${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring
${string//substring/replacement} 使 用$replacement, 代替所有匹配的$substring
${string/#substring/replacement} 如 果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
${string/%substring/replacement} 如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
expr match "$string" '$substring' 匹配$string开头的$substring* 的长度
expr "$string" : '$substring' 匹 配$string开头的$substring* 的长度
expr index "$string" $substring 在$string中匹配到的$substring的第一个字符出现的位置
expr substr $string $position $length 在$string中 从位置$position开始提取长度为$length的子串
expr match "$string" '\($substring\)' 从$string的 开头位置提取$substring*
expr "$string" : '\($substring\)' 从$string的 开头位置提取$substring*
expr match "$string" '.*\($substring\)' 从$string的 结尾提取$substring*
expr "$string" : '.*\($substring\)' 从$string的 结尾提取$substring*
5,中 括号
if [ CONDITION ] 测 试结构
if [[ CONDITION ]] 扩 展的测试结构
Array[1]=element1 数 组初始化
[a-z] 正 则表达式的字符范围
6,大括号
${variable} 参数替换
${!variable} 间 接变量引用
{ command1; command2; . . . commandN; } 代码块
{string1,string2,string3,...} 大 括号扩展
7, 圆括号
( command1; command2 ) 子shell中 执行的命令组
Array=(element1 element2 element3) 数组初始化
result=$(COMMAND) 在 子shell中执行命令, 并将结果赋值给变量
>(COMMAND) 进 程替换
<(COMMAND) 进 程替换
8,双圆括号
(( var = 78 )) 整型运算
var=$(( 20 + 5 )) 整型运算, 并将结果赋值给变量
9,引 号
"$variable" " 弱"引用 'string' "强"引用
10,后 置引用
result=`COMMAND` 在 子shell中运行命令, 并将结果赋值给变量
shell 函数与内置变量的更多相关文章
- Jmeter之Bean shell使用-常用内置变量
Bean Shell常用内置变量 JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.l ...
- ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数
一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...
- awk(流程控制、内置变量、内置函数、数组)
摘自:http://bbs.51cto.com/thread-883948-1-1.html awk(流程控制.内置变量.内置函数.数组) ... 参考其他的资料,给大家看看.一.awk流程控制语句 ...
- Python每日一练------内置函数+内置变量+内置模块
1.内置函数 Python所有的内置函数 Built-in Functions abs() divmod() input() open() staticmethod() all() e ...
- shell 脚本中常用的内置变量
在 Bash 解释器中,内置了许多变量,这些变量的功能是解释器自带的,我们在编写shell脚本时如果能灵活的使用它们,对脚本的编写效率以及差错大有帮助, 下面一一介绍这些变量 $FUNCNAME.$L ...
- shell 学习笔记4-shell内置变量命令
一.shell 的一些内置命令 常用的一内部命令有:echo.eval.exec.export.read.shift 1.echo命令-在屏幕中输出信息 1)说明 格式:echo args #< ...
- 『忘了再学』Shell基础 — 29、AWK内置变量
目录 1.AWK内置变量 2.练习说明 (1)$n变量练习 (2)FS变量练习 (3)NF变量和NR变量练习 3.总结: 1.AWK内置变量 AWK内置变量如下表: awk内置变量 作用 $0 代表目 ...
- BASH内置变量
BASH内置变量 ().BASH 作用:bash的完整路径.默认为/bin/bash ().BASH_ENV 作用:仅在非交互模式中适用.在执行shell脚本时,会先检查该变量是否指定了启动 脚本,若 ...
- Python第八天 模块 包 全局变量和内置变量__name__ Python path
Python第八天 模块 包 全局变量和内置变量__name__ Python path 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Pyt ...
随机推荐
- (转)Asp.Net生命周期系列三
原文地址:http://www.cnblogs.com/skm-blog/p/3178862.html 上文讲到了HttpRunTime主要做了三个事情,我们先回忆一下. 第一:雇佣了项目经理(Htt ...
- 编写高质量代码改善C#程序的157个建议——建议22:确保集合的线程安全
建议22:确保集合的线程安全 集合线程安全是指多个线程上添加或删除元素时,线程键必须保持同步. 下面代码模拟了一个线程在迭代过程中,另一个线程对元素进行了删除. class Program { sta ...
- 20169219 TCP_IP网络协议攻击实验报告
(1) ARP缓存欺骗 RP 缓存是 ARP 协议的重要组成部分.ARP 协议运行的目标就是建立 MAC 地址和 IP 地址的映射,然后把这一映射关系保存在 ARP 缓存中,使得不必重复运行 ARP ...
- P1001
原创 问题描述: 当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法. 具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位, ...
- Qt绘制简单的风向玫瑰图代码
1.绘制简单的风向玫瑰图代码2.主要使用QPainter3.在子widget上绘制需要使用widget监视事件 eventfilter update();//更新界面 //镜头12 QPainter ...
- MySql8.0后密码认证方式问题[caching-sha2-password]
这个问题通常在laravel中表现为类似下边的异常: local.ERROR: SQLSTATE[HY000] [2006] MySQL server has gone away {"exc ...
- 设置使用的python版本
一.查看当前使用的python版本,或设置使用的python版本 二.python2中默认使用ASCII码,无法识别中文,报错如图,解决办法,设置字符集为utf-8
- luoguP2387 [NOI2014]魔法森林
https://www.luogu.org/problemnew/show/P2387 考虑先将所有边按 a 值排序,依次加入每一条边,如果这条边的两个端点 ( l, r ) 之间的简单路径中 b 的 ...
- CF1137F Matches Are Not a Child's Play(树链剖分)
题面 我们定义一棵树的删除序列为:每一次将树中编号最小的叶子删掉,将该节点编号加入到当前序列的最末端,最后只剩下一个节点时将该节点的编号加入到结尾. 例如对于上图中的树,它的删除序列为:2 4 3 1 ...
- SimpleDateFormat线程不安全及解决办法
原文链接:https://blog.csdn.net/csdn_ds/article/details/72984646 以前没有注意到SimpleDateFormat线程不安全的问题,写时间工具类,一 ...