Linux shell 脚本学习

错误重定向:

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: 字符集1
SET2:字符集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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值