几个shell小技巧
2010-11-29 16:27
232 查看
1. expr 命令
由于bash 是功能有限的解释器,所以自身并没有支持太多的算术运算,一切都是字符串。所以如果涉及到算术运算,需要借助其他的工具,比如bc(功能比较强大的小工具),expr 和$(())算术扩展.
expr 支持几个常见的算术运算+ ,--, * , /, %(取模),
.
expr还支持常见的关系运算,比如 = ,!= , >, >= , <, <=:
题外话:如果要想计算指数,如何做呢?给出两种方案:
2. $() 扩展和``扩展
这两个扩展,按照我的经验,没有什么本质的区别,都是迫使命令执行,
3. 在平时工作中,会遇到要向一些只有root才能有权限进入的目录里放入一些文件,比如/var/www目录里放一些音乐,但又不想破坏文件原有的属性。这时可以使用sudo(我讨厌sudo),或者cp的一个选项 -p
4.xargs
手册页中,对于xargs是这样描述的:
xargs 从 标准 输入 读入 参数. 参数 用 空格(可以 用 双引号 单引号 或
反斜杠 转意) 或者 回车 隔开. 然后 一次 或者 多次 执行 命令 command (默认 是 /bin/echo), 其 参数 是
initial-arguments 后面 再 加上 从 标准 输入 读入 的 参数. 标准 输入中 的 空格 被 忽略.
再来看看xargs的参数,
xargs [-0prtx] [-e[eof-str]] [-i[replace-str]] [-l[max-lines]] [-n max-
args] [-s max-chars] [-P max-procs] [--null] [--eof[=eof-str]]
[--replace[=replace-str]] [--max-lines[=max-lines]] [--interactive]
[--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-procs]
[--max-args=max-args] [--no-run-if-empty] [--version] [--help] [command
[initial-arguments]]
简单的说,xargs 从标准输入得到参数,然后执行command (由于command是可选的,所以如果不提供的话,默认是执行/bin/echo命令)
command参数一方面是标准输入,另一方面是command位置提供.
由于bash 是功能有限的解释器,所以自身并没有支持太多的算术运算,一切都是字符串。所以如果涉及到算术运算,需要借助其他的工具,比如bc(功能比较强大的小工具),expr 和$(())算术扩展.
expr 支持几个常见的算术运算+ ,--, * , /, %(取模),
.
wolf@debian:~$ sum=1 wolf@debian:~$ sum=`expr $sum + 11` wolf@debian:~$ echo $sum 12 wolf@debian:~$ expr $sum / 2 6 wolf@debian:~$ expr $sum * 2 #错误,下面给出答案 expr: 语法错误 wolf@debian:~$ expr $sum - 2 10 wolf@debian:~$ expr $sum ** 2 #不支持指数运算 expr: 语法错误 wolf@debian:~$ expr $sum % 5 2 wolf@debian:~$ expr $sum 12 wolf@debian:~$ expr $sum /* 2 #这里是关键,*需要转义 24 wolf@debian:~$ expr $sum /** 2 #因为不支持指数运算,转义了也没用,下同. expr: 语法错误 wolf@debian:~$ expr $sum /*/* 2 expr: 语法错误
expr还支持常见的关系运算,比如 = ,!= , >, >= , <, <=:
wolf@debian:~$ expr 1 = 2 0 wolf@debian:~$ expr 1 != 2 1 wolf@debian:~$ expr 1 > 2 wolf@debian:~$ echo $? 0 wolf@debian:~$ expr 1 >= 2 #为什么呢? expr: 语法错误 wolf@debian:~$ expr 1 />= 2 0 wolf@debian:~$ expr 1 /> 2 0 wolf@debian:~$ expr 1 /< 2 1 wolf@debian:~$ expr 1 /<= 2 1
题外话:如果要想计算指数,如何做呢?给出两种方案:
wolf@debian:~$ let a="3**3" #使用let关键字,注意let是必须的 wolf@debian:~$ echo $a 27 wolf@debian:~$ b="3**3" #如果没有let关键字,则只是普通扩展 wolf@debian:~$ echo $b 3**3 wolf@debian:~$ a=$(( 3**3 )) #这里使用了$(())扩展 wolf@debian:~$ echo $a 27
2. $() 扩展和``扩展
这两个扩展,按照我的经验,没有什么本质的区别,都是迫使命令执行,
wolf@debian:~$ a=`expr 1+2` #一定要注意,expr命令后的参数一定要分开 wolf@debian:~$ echo $a 1+2 wolf@debian:~$ a=`expr 1 + 2` #这里就是分开的参数 wolf@debian:~$ echo $a 3 wolf@debian:~$ a=$( expr 1 + 2 ) wolf@debian:~$ echo $a 3
3. 在平时工作中,会遇到要向一些只有root才能有权限进入的目录里放入一些文件,比如/var/www目录里放一些音乐,但又不想破坏文件原有的属性。这时可以使用sudo(我讨厌sudo),或者cp的一个选项 -p
root@debian:/home/wolf# cp big.c /tmp root@debian:/home/wolf# ls -l /tmp/big.c -rw-r--r-- 1 root root 1907 11月 29 16:37 /tmp/big.c root@debian:/home/wolf# cp -p big.c /tmp root@debian:/home/wolf# ls -l /tmp/big.c -rw-r--r-- 1 wolf wolf 1907 10月 31 10:44 /tmp/big.c
4.xargs
手册页中,对于xargs是这样描述的:
xargs 从 标准 输入 读入 参数. 参数 用 空格(可以 用 双引号 单引号 或
反斜杠 转意) 或者 回车 隔开. 然后 一次 或者 多次 执行 命令 command (默认 是 /bin/echo), 其 参数 是
initial-arguments 后面 再 加上 从 标准 输入 读入 的 参数. 标准 输入中 的 空格 被 忽略.
再来看看xargs的参数,
xargs [-0prtx] [-e[eof-str]] [-i[replace-str]] [-l[max-lines]] [-n max-
args] [-s max-chars] [-P max-procs] [--null] [--eof[=eof-str]]
[--replace[=replace-str]] [--max-lines[=max-lines]] [--interactive]
[--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-procs]
[--max-args=max-args] [--no-run-if-empty] [--version] [--help] [command
[initial-arguments]]
简单的说,xargs 从标准输入得到参数,然后执行command (由于command是可选的,所以如果不提供的话,默认是执行/bin/echo命令)
command参数一方面是标准输入,另一方面是command位置提供.
wolf@debian:~$ find ./os -type f | xargs grep mandriva 匹配到二进制文件 ./os/mandriva-linux-one-2010-spring-GNOME-africa-asia-cdrom-i586.iso
相关文章推荐
- 几个shell小技巧
- shell中的几个特殊变量
- DataGrid的几个小技巧!
- 菜鸟学android——几个很实用的控件小技巧
- 几个网页制作的小技巧
- shell的几个实用快捷键
- 【转载】python 提高效率的几个小技巧
- 几个C#编程的小技巧
- DataGrid的几个小技巧!(包括:使用模版列;使用按钮列;)
- Hibernate+Spring配置的几个小技巧
- DataGrid的几个小技巧
- [CSS Tips]:几个css小技巧
- shell 字符串操作的几个例子
- 几个C#编程的小技巧 (一)
- python中执行shell命令的几个方法小结
- 春天了,给你护肤美容的几个小技巧 - 生活至上,美容至尚!
- 小技巧一则: Linux下记录历史shell命令
- shell脚本 屏蔽人机交互的小技巧 [ 光影人像 东海陈光剑 的博客 ]
- DataGrid的几个小技巧!
- shell脚本处理日志的几个题目