您的位置:首页 > 运维架构 > Shell

linux shell学习笔记1(特殊符号)

2011-02-06 21:12 507 查看
# 注释,或者脚本第一行的#!/bin/bash

; 命令分隔符,可以用来在一行中来写多条命令

;; 终止case 例如:

case "$variable" in

abc) echo "/$variable=abc" ;;

xyz) echo "/$variable=xyz" ;;

esac

" 部分引用

' 全部引用

/ 转义

, 分隔算术操作,只有最后一项被返回

let "t2=((a=9,15/3))"

#set "a=9" and "t2=15/3"

` 后置引用,命令替换

: 空命令,等价于"NOP",起到true的作用

如:

:

echo $? #0

死循环:

while:

do

...

done

在if/then中的占位符,如:

if condition

then :

else

take-some-action

fi

在一个2元命令中提供占位符:

:${username='whoami'}

使用“参数替换”来评估字符串变量

:${HOSTNAME?}${USER?}${MAIL?}

#如果一个或多个必要的环境变量没被设置,就会打印出错信息

:>data.txt #文件data.txt被清空

":"用来做环境变量的分隔符

echo $PATH

/usr/local/bin:/usr/x11r6/bin:/sbin

* 匹配文件名中的任意字符,数学运算中的乘

** 幂运算

! 取反

? 测试操做

$ 变量替换

$ 正则表达式的结束符

${} 参数替换

$*,$@ 位置参数

$? 退出状态,0为成功,非0为失败

$$ 进程ID变量,脚本的进程ID

() 命令组,子shell。子shell中的变量对于脚本剩下的部分不可用,例如:

a=123

(a=321;)

echo "a=$a" #a=123

初始化数组:

Array=(element1,element2,element3)

{aaa,bbb,xxx...}

大括号扩展,其中不能有空格,

cat {file1,file2,file3}>combined_file

#将file1,file2,file3

{} 代码块:创建了一个匿名函数,但与函数不同的是,在其中声明的变量对于脚本的其他部分还是可见的

a=123

{a=321;}

echo "a=$a" #a=321

与()不同,{}中的代码块将不能正常地开启一个新的shell

[] test表达式

if [ -z "$1" ] 判断第1个参数是否为空

if [ "$?" -eq 0 ] 判断上一条语句是否成功

if [ -n "$2" ] 判断第2个参数是否为整型

......

[] 数组元素:

Arrary[1]=slot_1

echo ${Array[1]}

>,>>,<<,< 重定向

scriptname>filename 重定向脚本输出到文件中,并覆盖原有文件

command&>filename 重定向stdout和stderr到文件中

command>&2 重定向stdout到stderr中 ,1为stdout,2为stderr

scriptname>>filename 重定向到脚本输出到文件中,并添加到文件末尾

<,> ASCII比较

/<,/> 正则表达式中的单词边界

grep '/<the/>' textfile

| 管道,用来产生命令链

cat *.lst | sort | uniq

#合并和排序所有的"*.lst"文件,然后删除所有重复的行

管道中的一个进程的stdout必须被下一个进程做为stdin读入,如果管道中的某个命令产生一个异常,并中途失败,那么这个管道将过早的终止,这种行为被叫做“a broken pipe”,并且这种状态下将发送一个SEGPIPE信号

>| 强制重定向

|| 或逻辑

& 后台执行

&& 与逻辑

- 之前的工作目录

cd - #进入到上一个工作目录

与$OLDPWD的环境变量相同

~ home目录

~+ 当前的工作目录,与$PWD相同

~- 之前的工作目录,相当与$OLDPWD

^ 正则表达式中的表示行首

例子来源于《高级Bash脚本编程指南》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: