Posts Tagged ‘shell’

January 30, 2011

  列位,近来俺系统地学习了一下shell编程,好家伙,那可不是一般的纷繁琐碎啊,可谓陷阱重重,防不胜防。摸索中,遇到这个页面,总结了Bash编程中的很多陷阱及必要的解决技巧。在这里,结合这本GNU Bash Reference Manual,我有选择地简要地把这些个Pitfalls给您用百姓喜闻乐见的中文展示出来。由于能力有限,我也不是专职的系统管理员,肯定不能详尽地把所有问题都解释清楚,我本人也觉得没有这个必要。仅供参考而已,欢迎指正和补充。

1
2
3
4
5
6
for i in *.mp3
do
    COMMANDS
done
# 单行形式就是for i in *.mp3; do COMMANDS; done
# ;只是起到命令和关键字间的分割符的作用,完全可以用换行符来代替
Tags: . 646 views
July 25, 2010

配置inputrc

  我们这里需要的是一种叫做菜单式补全(menu-complete)的功能。通常,默认情况下,这个选项是没有被配置的。为了配置这项功能,并为之进行快捷键绑定,我们需要修改inputrc配置文件,这个文件中保存了Readline的一些键绑定和其它诸如编辑模式的配置选项。像许多其它配置文件一样,inputrc有系统级的配置选项/etc/inputrc和用户级的点文件~/.inputrc。建议建立自己的点文件,而不是直接编辑系统级文件,当然如果整个系统只是你一个人在用的话,你也可以在/etc/inputrc上面直接编辑。但使用点文件的另一个好处告诉你,它是属于你自己的,即使在另外一个不同的发行版上,点文件通常也是可以直接使用的。这可以减轻你在不同系统上的不适。
  好了,打开或者建立你的.inputrc,写下,下面两行:

1
2
"\C-j": menu-complete
"\C-k": menu-complete-backward
Tags: ,,. 242 views
May 30, 2010

  介绍一个新命令,保准你从未听说过,但它实现的操作你应该一直都在使用,这个命令就是mkcd。其实它不是一个命令,而是一个shell函数:

1
2
3
4
5
6
7
8
9
10
11
# mkcd: mkdir, then cd
mkcd()
{
    if [ $# = "1" ]
    then
        mkdir -p "$1"
        cd "$1"
    else
        echo "Usage: mkcd folder"
    fi
}

  很简单,相信你一看就知道它能做什么了。

Tags: ,. 102 views
May 11, 2010

  俺学习和使用Shell过程中积累的一些东西,希望对某些看官有用。另,本人使用bash环境。

Shell预设环境变量

环境变量 说明
$HOME 当前用户主目录
$PATH 冒号分割的用来搜索命令的目录的几何
$PS1 命令提示符,例如[\u@\h/\W$]给出了user@host/folder $这样的提示符
$PS2 二级提示符,通常仅仅包含一个>
$IFS 输入分割域,通常为空白符,即空格、制表符、回车
$0 shell脚本的文件名
$# 调用本脚本时提供的参数个数
$$ shell脚本的进程号
$! 后台进程的进程号
$? 上一个进程的退出状态
$1, $2, ……, $n 脚本的参数,n超过9时需要用${n}
$* 包含了所有的参数,各参数以$IFS分割
$@ 类似$*,但当$IFS为空时,各参数不会到一块儿,”$*”和”$@“的扩展不同
Tags: . 187 views
April 3, 2010
描述
Tab 自动补全文件名或者目录名,按下两次会列出多个选项
Ctrl + w 删除左侧的一个单词
Ctrl + u 向左删除字符至行首
Ctrl + k 同上一个命令,但向右删除
Ctrl + y 在光标处粘贴Ctrl + w等所删除的字符序列
Ctrl + t 交换光标前的两个字符
Alt + t 交换光标前的两个单词
Ctrl + -或者 Ctrl + xu 取消上次编辑动作
Ctrl + p 同方向键Up,显示上一个命令
Ctrl + n 同方向键Down,显示下一条命令
Ctrl + b 同方向键Left
Ctrl + f 同方向键Right
Ctrl + l(L) 清屏
Alt + b 光标左移一个word(连续非空字符串)
Alt + f 光标右移一个word
Ctrl + c 终止当前命令
Ctrl + z 将当前命令移至后台执行,fg可招回
Ctrl + d 终止当前会话
!! 重复上一个命令
Ctrl + r 搜索命令history
^foo^bar 替换上一个命令中的foo为bar并执行
cd – 返回上一个目录,alias — -=’cd -’后,-即可

为了使Tab补全时忽略字母的大小写,你需要在.bashrc中加入bind ‘set completion-ignore-case on’

Tags: . 107 views
March 28, 2010

一个演示脚本

  下面的这个脚本修改自《A Practical Guide to Linux Command, Editions, and Shell Programming》。不提供参数时,它将标准输入输出到标准输出;提供一个文件名参数时,将该文件输出到标准输出;提供两个文件名参数时,它将提一个文件复制到第二个文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#! /bin/sh
 
case $# in
    0)
        exec 3<&0 4>&1
        ;;
    1)
        exec 3<$1 4<&1
        ;;
    2)
        exec 3<$1 4>$2
        ;;
    *)
        echo "Usage: `basename $0` [source [dest]]"
        exit 1
        ;;
esac
cat <&3 >&4
exec 3<&- 4>&-
exit 0
Tags: . 455 views
March 22, 2010

  当然,我不会一行行的粘贴复制。有一个叫做的tac的命令似乎能完成这个工作,但它只能将整个文件反转。更好的选择是sed:

sed  -e '4,240G;3,240h;3,239d' sample.js > reverse.js

  这样就搞定了!
  简单解释一下。sed内部维护着两个缓冲区,模式缓冲和保留缓冲。通常,sed每每从文件读入一行就放入模式缓冲,由-e选项指定的各个命令依次处理这个缓冲内的文本,所有命令都执行完后,sed就把模式缓冲的内容输出的标准输出(如果没有指定-n选项的话)。保留缓冲是一个由用户显式使用的缓冲区。-e ’4,240G;3,240h;3,239d’中,G将保留缓冲取的内容附加到(append)模式缓冲,h将模式缓冲复制(copy)到保留缓冲,d将模式缓冲区的内容清除,各个命令前由逗号分割的数字指名了后面的命令在哪些行上执行,各命令由分号进行分割。
  具体地:

  1. 1、2行被读入(模式缓冲)时,-e列出各命令都没有动作,直接输出;
  2. 第3行被读入时,G不执行,h将该行复制到保留缓冲,d将模式缓冲清除,没有输出;
  3. 第4行被读入模式缓冲,然后G将保留缓冲的内容(第三行)附加到模式缓冲,h又将模式缓冲复制到保留缓冲,d又将模式缓冲清除,没有输出;
  4. 重复3,直到第239行;
  5. 第240行被读入,G将第239到3行附加到第240行后面,h又将其复制到保留缓冲,d不执行,240到3行被输出;
  6. 241到243行被原样输出,至此,3~240行被反转
Tags: ,,. 201 views
March 21, 2010

更新:

  上面的脚本有一个问题,没播放一首歌曲mplayer都需要退出一次,耗费资源不说,还不能回放上一首。为了更方面的使用mplayer自身的功能和快捷键,我更新了上面的脚本,为mplayer生成了一个播放列表,然后用命令mplayer -playlist list.txt来播放。这样利用mplayer的快捷键,我们就可以很好的控制这个播放器了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/sh
 
#当脚本退出或被中断(Ctrl+C)时,删除曲目文件
trap 'rm -f list.txt;exit 1' INT
trap 'rm -f list.txt' EXIT
#连接ftp并进入指定目录
lftp "$1" <<!TOC!
cd pub/"$2"/
ls > list.txt
quit
!TOC!
#删除非mp3文件名,得到mp3文件名
sed -i -e '/mp3/!d' -e 's/^.\{56\}//g' list.txt
sed -i "s#^\(.*\)#ftp://$1/pub/$2/\1#g" list.txt
mplayer -playlist list.txt  >/dev/null 2>&1
Tags: ,. 88 views
August 24, 2009

convert是imagemagick软件包中的一个命令。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。这里介绍几个简单的命令,具体的用法请参考man手册或者其官方网站。在Ubuntu中用命令

1
sudo apt-get install imagemagick

来安装,windows下的使用可以到官方网站下载。

Tags: ,,,. 526 views
Page 1 of 11