Linux shell 脚本学习 – yasi

错误重定向:

command 2>file

command命令执行的出错信息输出到文件file

局部变量 vs 非局部变量:

function foo()

{

para="hello world"

}

这里的para不是local变量,即在函数foo之外,也可以访问到它,整个shell脚本中都可以读写它。如果要让它只存在于函数foo中,需要在para前面加local关键字。

Shell脚本中的export环境变量不起作用:

在一个shell脚本文件test.sh中写了

export MY_VAR=my_test_var_value

然后执行这个test.sh,结果在env中找不到MY_VAR。但是直接在命令行中执行export MY_VAR=my_test_var_value,就能在 env 中找到MY_VAR。

原因在于,test.sh中的export操作在它的的父脚本(可以认为是当前命令行)中是没有效力的,在命令行中执行完 ./test.sh 后,test.sh 中的操作,包括export环境变量都将失效。

解决办法:用在test.sh前面用source或其等效物.,即

source ./test.sh

. ./test.sh

对该问题的详细描述,请看《shell中source命令和.逗号命令对当前父shell的影响》

case的default分支:

default分支是 *) 表示的分支

case … in …) do something here ;; …) do something here ;; *) do soemthing for default branch;;esac

Shell中变量的大小写转换的一种简单方法:

declare -l x="Hello"就可以将x的值变成"hello"

declare -u x="Hello"就可以将x的值变成"HELLO"

注意:这种方法不是在所有的机器上都能工作,比如在一台CentOS 5.3机器上做这样的操作,会提示下面的错误

declare: -l: invalid option

declare: usage: declare [-afFirtx] [-p] [name[=value] …]

所以,用下面的方法要靠谱一些

another-variable=`echo ${some-variable} | tr ‘A-Z’ ‘a-z’`

注意,这里的等号右边以及语句最右边的`是Esc下发的`

shell脚本调试方法:

一般使用以下三种方式调试:

1)echo利用echo在可能出错的地方打印出变量的值;2)sh -n your_script 这种运行模式可在不执行脚本的情况下检查出脚本的所有语法错误;3)sh -x your_script 这是shell的调试模式。这种方式运行脚本时将会打印出整个脚本运行过程中的变量值。

tr 的用法

tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换。语法:tr [–c/d/s/t] [SET1] [SET2]SET1: 字符集1SET2:字符集2-c:complement,用SET2替换SET1中没有包含的字符-d:delete,删除SET1中所有的字符,不转换-s: squeeze-repeats,压缩SET1中重复的字符-t: truncate-set1,将SET1用SET2转换,一般缺省为-t

关于 $*

$*,该变量包含了所有输入的命令行参数值。如果您运行showrpm openssh.rpm w3m.rpm webgrep.rpm此时 $* 包含了 3 个字符串,即openssh.rpm, w3m.rpm and webgrep.rpm

当一个人真正觉悟的一刻,他放弃追寻外在世界的财富,而开始追寻他内心世界的真正财富

Linux shell 脚本学习 – yasi

相关文章:

你感兴趣的文章:

标签云: