$1,$2 ... $9
通过位置参数引用命令行中的参数。如果需要引用9个之后的参数,必须用到大括号:${10}。
$0
命令的名字
$$
shell把执行shell进程的PID存储在$$中。
$!
后台运行的进程的PID
$?
上一个命令的返回状态码
$#
除了命令自身,命令行参数的个数
$*
包含所有的命令行参数。只产生一个参数
$@
包含所有的命令行参数。生成的是一串参数,其中每个位置的参数仍然是一个单独的参数。
$*和$@的对比
首先了解一下set的含义。set命令吧set后面的一个或几个参数赋值给位置参数。例如脚本a.sh
set this is it
echo $3 $2 $1
运行脚本./a.sh
it is this
不带任何参数运行set,会显示所有设置好的shell变量
然后看下面两个脚本
a.sh
set "$*"
echo 1: $1
echo 2: $2
echo 3: $3
运行命令./a.sh a b c 的结果是:
1: a b c
2:
3:
b.sh
set "$@"
echo 1: $1
echo 2: $2
echo 3: $3
运行命令./b.sh a b c 的结果是:
1: a
2: b
3: c
因此在shell脚本中$@用的更广泛一些。
2010年1月17日星期日
shell的初始化文件
shell启动时会运行初始化文件。但是系统中会同时存在多个初始化文件,/etc/profile,.bash_profile,/ect/bashrc,.bashrc 等等,到底是使用哪一个呢?
首先要了解shell的三种运行模式,登录shell,非登录交互式shell和非交互式shell。针对每一种类型,初始化时用到的文件会不同。
1. 登录shell
/etc/profile,所用用户都会先执行这个文件
然后依次查找 ~/.bash_profile ~/.bash_login, ~/.profile。可以覆盖掉/etc/profile中的默认配置
注销时会执行 ~/.bash_logout
2. 非登录交互式shell(比如通过命令bash)
交互式非登录shell并不执行1中提到的初始化文件,但是它会从登录shell继承由这些初始化文件设置的shell变量。
/etc/bashrc 全局配置,不会被自动调用。
.bashrc 一般在这个文件中会调用/etc/bashrc,好设置全局环境。 .bash_profile通常会运行这个文件,这样,登录shell和非登录shell都可以使用.bashrc中的命令。
3. 非交互式shell(用来运行shell脚本)
非交互式shell并不执行前面描述的初始化文件,但是它会从登录shell那里继承设置好的shell变量。
非交互式shell查找环境变量BASH_ENV,并执行有该变量命名的文件中的命令
.bashrc可能被执行多次,所以最好将那些附加已有变量的命令放到.bash_profile中,例如
PATH=$PASH:$HOME/bin
修改了初始化文件后,可以使用内置命令"."或source使修改生效,这两个命令将脚本作为当前进程的一部分运行。也可以使用它们运行其他脚本,但可能会修改用户依赖的shell变量。如果不是用"."或source运行初始化脚本,那么这些启动脚本中创建的变量将之灾运行该脚本的子shell中起作用,并不影响到启动该脚本的shell。
首先要了解shell的三种运行模式,登录shell,非登录交互式shell和非交互式shell。针对每一种类型,初始化时用到的文件会不同。
1. 登录shell
/etc/profile,所用用户都会先执行这个文件
然后依次查找 ~/.bash_profile ~/.bash_login, ~/.profile。可以覆盖掉/etc/profile中的默认配置
注销时会执行 ~/.bash_logout
2. 非登录交互式shell(比如通过命令bash)
交互式非登录shell并不执行1中提到的初始化文件,但是它会从登录shell继承由这些初始化文件设置的shell变量。
/etc/bashrc 全局配置,不会被自动调用。
.bashrc 一般在这个文件中会调用/etc/bashrc,好设置全局环境。 .bash_profile通常会运行这个文件,这样,登录shell和非登录shell都可以使用.bashrc中的命令。
3. 非交互式shell(用来运行shell脚本)
非交互式shell并不执行前面描述的初始化文件,但是它会从登录shell那里继承设置好的shell变量。
非交互式shell查找环境变量BASH_ENV,并执行有该变量命名的文件中的命令
.bashrc可能被执行多次,所以最好将那些附加已有变量的命令放到.bash_profile中,例如
PATH=$PASH:$HOME/bin
修改了初始化文件后,可以使用内置命令"."或source使修改生效,这两个命令将脚本作为当前进程的一部分运行。也可以使用它们运行其他脚本,但可能会修改用户依赖的shell变量。如果不是用"."或source运行初始化脚本,那么这些启动脚本中创建的变量将之灾运行该脚本的子shell中起作用,并不影响到启动该脚本的shell。
2010年1月15日星期五
推荐图形化的sar工具 kSar
sar是Linux下最常用的系统信息查看和收集工具,而kSar 是Java开发的一个应用,利用sar输出的文本信息生成图形。kSar有两种使用方式:
1. 从文件装载sar文本数据
2. 利用ssh在远程目标机器上执行sar命令,实时监控,最后再保存为图形
第二种方式非常有用,在压测时可以替换LoadRunner来监控系统负载和其他更多信息,完全根据你设置的sar参数。例如我使用的是sar -q -u -d -n DEV -r 30 10000,每30秒收集一次load,cpu,硬盘,网卡和内存信息。
1. 从文件装载sar文本数据
2. 利用ssh在远程目标机器上执行sar命令,实时监控,最后再保存为图形
第二种方式非常有用,在压测时可以替换LoadRunner来监控系统负载和其他更多信息,完全根据你设置的sar参数。例如我使用的是sar -q -u -d -n DEV -r 30 10000,每30秒收集一次load,cpu,硬盘,网卡和内存信息。
2010年1月13日星期三
shell脚本中cd `dirname $0` 是什么意思
1. dirname - strip non-directory suffix from file name,翻译成白话就是,从输入的字符串中将目录截取出来,它不会去检查目录是否存在。
例如,dirname /a/b/c/d ,运行结果是/a/b/c
2. `command` ,将命令的执行结果作为字符串返回。也可以写成$(command)
3. $0,命令行的第一个参数,代表命令本身
4. dirname $0,将命令的路径截取出来
5. `dirname $0`,返回命令的路径
6. cd `dirname $0`,进入命令所在的目录
那位兄弟说了,pwd不是很简单,干嘛写的这么复杂dirname $0。
pwd取的当前路径,反应的是你在什么路径下执行命令,和我们想取得命令所在的目录还是有很大区别。
例如我们有个脚本/home/admin/bin/a.sh
echo $(dirname $0) echo $(pwd)
在/home/admin/bin下执行
./a.sh
结果是:
.
/home/admin/bin
这两个结果都是正确的。
在/home/admin目录下执行
bin/a.sh
结果是:
bin
/home/admin
可以看到区别了。不管在什么目录下执行命令,$(dirname $0)总是能命令所在的路径。
例如,dirname /a/b/c/d ,运行结果是/a/b/c
2. `command` ,将命令的执行结果作为字符串返回。也可以写成$(command)
3. $0,命令行的第一个参数,代表命令本身
4. dirname $0,将命令的路径截取出来
5. `dirname $0`,返回命令的路径
6. cd `dirname $0`,进入命令所在的目录
那位兄弟说了,pwd不是很简单,干嘛写的这么复杂dirname $0。
pwd取的当前路径,反应的是你在什么路径下执行命令,和我们想取得命令所在的目录还是有很大区别。
例如我们有个脚本/home/admin/bin/a.sh
echo $(dirname $0) echo $(pwd)
在/home/admin/bin下执行
./a.sh
结果是:
.
/home/admin/bin
这两个结果都是正确的。
在/home/admin目录下执行
bin/a.sh
结果是:
bin
/home/admin
可以看到区别了。不管在什么目录下执行命令,$(dirname $0)总是能命令所在的路径。
如何在SecureCRT中使用Emacs的metakey
Emacs的metakey键是alt,但alt同样是SecureCRT的快捷键,纠结呀
在命令行工作,缺省绑定的就是Emacs模式,很多组合键用不了,杯具呀
解决方法,在session选项中选择Emacs,设置alt为metakey。没有在全局选项中找到这个设置,每个session都要配置,忍了...
那SecureCRT的快捷键怎么办?
如果要访问菜单,例如File,View等,可以“Alt and release” + method 代替Alt+ method。我最常使用的快捷键是在tab中新建连接,原先是Alt+b,现在变成了Alt and release + f + b,还好能接受。
另一种方式就是重新映射快捷键。
在这个帖子中有SecureCRT的技术支持回答了这个问题。
在命令行工作,缺省绑定的就是Emacs模式,很多组合键用不了,杯具呀
解决方法,在session选项中选择Emacs,设置alt为metakey。没有在全局选项中找到这个设置,每个session都要配置,忍了...
那SecureCRT的快捷键怎么办?
如果要访问菜单,例如File,View等,可以“Alt and release” + method 代替Alt+ method。我最常使用的快捷键是在tab中新建连接,原先是Alt+b,现在变成了Alt and release + f + b,还好能接受。
另一种方式就是重新映射快捷键。
在这个帖子中有SecureCRT的技术支持回答了这个问题。
2009年4月15日星期三
ubuntu自动登录
修改 /etc/gdm/gdm.conf
AutomaticLoginEnable=true
AutomaticLogin=root
这个真是太有用了。今天安装ubuntu时由于键盘布局的问题造成无法登录,只好用live USB重启,在/media下找到硬盘上的安装版,修改后就可以登录进去了。
AutomaticLoginEnable=true
AutomaticLogin=root
这个真是太有用了。今天安装ubuntu时由于键盘布局的问题造成无法登录,只好用live USB重启,在/media下找到硬盘上的安装版,修改后就可以登录进去了。
2009年4月12日星期日
ubuntu软件的卸载和安装
http://www.cppblog.com/tx7do/archive/2007/05/07/23571.html
方法一:可以用终端安装或卸载软件。
方法二:用系统自带的“新立得软件包管理器”
方法一:可以用终端安装或卸载软件。
方法二:用系统自带的“新立得软件包管理器”
在终端里
在“新立得”里
安装软件 apt-get install softname1 softname2 softname3……
卸载软件 apt-get remove softname1 softname2 softname3……
卸载并清除配置 apt-get remove --purge softname1
更新软件信息数据库 apt-get update
进行系统升级 apt-get upgrade
搜索软件包 apt-cache search softname1 softname2 softname3……
安装deb软件包 dpkg -i xxx.deb
删除软件包 dpkg -r xxx.deb
连同配置文件一起删除 dpkg -r --purge xxx.deb
查看软件包信息 dpkg -info xxx.deb
查看文件拷贝详情 dpkg -L xxx.deb
查看系统中已安装软件包信息 dpkg -l
重新配置软件包 dpkg-reconfigure xxx
在“新立得”里
点搜索,输入软件名
在需要安装或卸载的软件上右击-点标记-最后点应用
2009年4月11日星期六
Ubuntu下安装fcitx中文输入法
1. 安装输入法软件 sudo apt-get install im-switch fcitx
2. 设置fcitx为缺省输入法 im-switch -s fcitx -z default
3. 为root用户设置缺省输入法 sudo im-switch -s fcitx -z default
4. (可选) 安装中文语言包 系统->系统管理 ->语言支持,选择汉语(中国)
5. 中文输入法的候选字浮动窗口显示方块乱码,原因是缺少字体支持
a. 打开 ~/.fcitx/config ,找到这一行“显示字体(中)=*”。原因就出在这里,这表示使用缺省字体. 使用fc-list 查看你安装了什么字体,我设置为”显示字体(中)=AR PL SungtiL GB“就可以了
b. 上一步在打开 ~/.fcitx/config时也有可能是乱码,是因为fcitx只能认gb2312的config.如果你用gedit,请不要双击打开config,而是打开gedit后再打开,打开时选择编码为gb2312.
2. 设置fcitx为缺省输入法 im-switch -s fcitx -z default
3. 为root用户设置缺省输入法 sudo im-switch -s fcitx -z default
4. (可选) 安装中文语言包 系统->系统管理 ->语言支持,选择汉语(中国)
5. 中文输入法的候选字浮动窗口显示方块乱码,原因是缺少字体支持
a. 打开 ~/.fcitx/config ,找到这一行“显示字体(中)=*”。原因就出在这里,这表示使用缺省字体. 使用fc-list 查看你安装了什么字体,我设置为”显示字体(中)=AR PL SungtiL GB“就可以了
b. 上一步在打开 ~/.fcitx/config时也有可能是乱码,是因为fcitx只能认gb2312的config.如果你用gedit,请不要双击打开config,而是打开gedit后再打开,打开时选择编码为gb2312.
订阅:
博文 (Atom)