shell 积累
ls -R ,这是递归选项,以目录树的形式列出所有文件
-S ,按照文件尺寸列出所有文件,
-t, 按照修改时间来列出文件,
-i 选项会显示文件的 inode.
cat -n 所有行前边插入行号.
-b 选项与 -n 选项一样, 区别是不对空行进行编号.
-v 选项可以使用 ^ 标记法 来 echo 出不可打印字符.
-s 选项可以把多个空行压缩成一个空行
factor 将一个正数分解成多个素数
===================================================
echo
打印(到 stdout)一个表达式或变量
printf
格式化输出,是 echo 命令的增强.它是 C 语言 printf()库函数的一个有限的变形
read
从 stdin 中读取一个变量的值,也就是与键盘交互取得变量的值
===================================================
#循环和分支#
for arg in [list]
do
command(s)...
done
-----------------
while [condition]
do
command...
done
-----------------
until [condition-is-true]
do
command...
done
-----------------
case "$variable" in
"$condition1")
command...
;;
"$condition1")
command...
;;
esac
-----------------
select variable [in list]
do
command...
break
done
===================================================
${}参数替换
$*,$@参数位置
$$ 运行脚本进程ID
$! 在后台运行的最后的工作的 PID
(())数学计算扩展
===================================================
===================================================
#重定向#
scriptname > filename 重定向脚本的输出到文件中,覆盖文件原有内容
command &> filename 重定向stdout和stderr到文件中
command >&2 重定向command 的stdout到stderr
scriptname >> filename 添加到文件尾端,如果没有文件则创建这个文件
exec < filename 命令会将 stdin 重定向到文件中. 从这句开始, 后边的输入就都来自于这个文
件了, 而不是标准输入了(通常都是键盘输入). 这样就提供了一种按行读取文件的方法, 并且
可以使用 sed 和/或 awk 来对每一行进行分析.
\<,\> 正则表达式中的单词边界。如:
bash$grep '\<the\>' textfile
===================================================
===================================================
#变量赋值#
a=23
let a=16+8
a=`ls -l` #把ls -l 的结果给a
R=$(cat /etc/rehat-release) #使用$(...),以上两种都是命令替换的形式
$0 是脚本文件的名字,$1 是第一个参数,$2 为第 2 个...,$9后需要括号,如${10}
$# 参数位置个数
$* 所有的位置参数,被作为一个单词 #注意:"$*"必须被""引用.
$@ 与$*同义,但是每个参数都是一个独立的""引用字串,意味着参数被完整地传递,并
没有被解释和扩展.
shift 命令重新分配位置参数,其实就是向左移动一个位置
===================================================
===================================================
在 echo 和 sed 中所使用的
\n 意味着新的一行
\r 回车
\t tab 键
vertical tab(垂直 tab),查前边的 Ctl-K
\v
\b backspace,查前边的 Ctl-H
\a "alert"(如 beep 或 flash)
\0xx 转换成 8 进制 ASCII 解码,等价于 oxx
===================================================
===================================================
#文件测试操作#
返回 true 如果...
-e 文件存在
-f file 是一个 regular 文件(不是目录或者设备文件)
-s 文件长度不为 0
-d 文件是个目录
-b 文件是个块设备(软盘,cdrom 等等)
-c 文件是个字符设备(键盘,modem,声卡等等)
-p 文件是个管道
-h 文件是个符号链接
-L 文件是个符号链接
-r 文件具有读权限(对于用户运行这个 test)
-w 文件具有写权限(对于用户运行这个 test)
-x 文件具有执行权限(对于用户运行这个 test)
-O 你是文件的所有者.
f1 -nt f2 文件 f1 比 f2 新
f1 -ot f2 f1 比 f2 老
f1 -ef f2 f1 和 f2 都硬连接到同一个文件.
! 非--反转上边测试的结果(如果条件缺席,将返回 true)
===================================================
===================================================
#整数比较#
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
#字符串比较#
字符串比较
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ],与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
1 [[ $a == z* ]] # 如果$a 以"z"开头(模式匹配)那么将为 true
2 [[ $a == "z*" ]] # 如果$a 等于 z*(字符匹配),那么结果为 true
-z 字符串为"null".就是长度为 0.
-n 字符串不为"null"
#混合比较#
-a 逻辑与
-o 逻辑或
这与 Bash 的比较操作符&&和||很相像.在[[]]中使用它.
1 [[ condition1 && condition2 ]]
-o 和-a 一般都是和 test 命令或者是[]一起工作.
1 if [ "$exp1" -a "$exp2" ]
===================================================
===================================================
#字符串长度#
${#string}
expr length $string
expr "$string" : '.*'
#从字符串开始的位置匹配子串的长度#
expr match "$string" '$substring'
$substring 是一个正则表达式
expr "$string" : '$substring'
$substring 是一个正则表达式
expr index $string $substring
匹配到子串的第一个字符的位置.
#提取子串#
${string:position}
在 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
${var/#Pattern/Replacement}
如果 var 的前缀匹配到了 Pattern,那么就用 Replacement 来替换 Pattern.
${var/%Pattern/Replacement}
如果 var 的后缀匹配到了 Pattern,那么就用 Replacement 来替换 Pattern.
${parameter=default},${parameter:=default}
如果 parameter 未设置,那么就设置为 default.
这两种办法绝大多数时候用法都一样,只有在$parameter 被声明并设置为空的时候
${parameter+alt_value},${parameter:+alt_value}
如果 parameter 被 set 了,那就使用 alt_value,否则就使用 null 字符串.
${parameter?err_msg}, ${parameter:?err_msg}
如果 parameter 被 set,那就是用 set 的值,否则 print err_msg.
${#var}
字符串长度($var 的字符数量).对于一个数组,${#array}是数组中第一个元素的长度.
一些例外:
${#*}和${#@}将给出位置参数的个数.

浙公网安备 33010602011771号