存档

文章标签 ‘bash’

Snow in your teminal(圣诞礼物:终端上下雪)

2011年12月25日 没有评论

原文来自:http://climagic.org/coolstuff/let-it-snow.html

第一段脚本:

clear
while :
do
        echo $LINES $COLUMNS $(($RANDOM%$COLUMNS))
        sleep 0.1
done | gawk '{
        a[$3]=0
        for(x in a) {
                o=a[x]
                a[x]=a[x]+1
                printf "\033[%s;%sH ",o,x
                printf "\033[%s;%sH*\033[0;0H",a[x],x
        }
}'

执行上面这段脚本之前,需要手工设置COLUMNS LINES或执行:

export COLUMNS LINES

第二段脚本:

 

原文来自:http://climagic.org/coolstuff/let-it-snow.html

分类: tips 标签: ,

Matrix Effect on teminal using bash(用bash在终端上显示matrix效果)

2011年12月22日 没有评论

原文来自http://www.climagic.org/coolstuff/matrix-effect.html

echo -e "\e[1;40m"
clear
while :
do
        echo $LINES $COLUMNS $(( $RANDOM % $COLUMNS)) $(( $RANDOM % 72 ))
        sleep 0.05
done | gawk '{ 
        letters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%^&*()"
        c=$4
        letter=substr(letters,c,1)
        a[$3]=0
        for (x in a) {
                o=a[x]
                a[x]=a[x]+1
                printf "\033[%s;%sH\033[2;32m%s",o,x,letter;
                printf "\033[%s;%sH\033[1;37m%s\033[0;0H",a[x],x,letter
                if (a[x] >= $1) {
                        a[x]=0;
                }
        }
}'

这一段在我的Linux(centos5和centos6)上跑都没问题,但是在我的mbp(Macbook pro)上不行,因为没有gawk。
第二个脚本:

echo -e "\e[1;40m"
clear
characters=$( jot -c 94 33 | tr -d '\n' )
while :
do
        echo $LINES $COLUMNS $(( $RANDOM % $COLUMNS)) $(( $RANDOM % 72 )) $characters
        sleep 0.05
done | gawk '{
        letters=$5
        c=$4
        letter=substr(letters,c,1)
        a[$3]=0
        for (x in a) {
                o=a[x]
                a[x]=a[x]+1
                printf "\033[%s;%sH\033[2;32m%s",o,x,letter
                printf "\033[%s;%sH\033[1;37m%s\033[0;0H",a[x],x,letter
                if (a[x] >= $1) {
                        a[x]=0
                }
        }
}'

这一段在我的centos上跑不了,因为缺省没装jot;但在我的ubuntu上可以跑,因为我

apt-get install athena-jot

第三个脚本:

echo -e "\e[1;40m"
clear
while :
do
        echo $LINES $COLUMNS $(($RANDOM % $COLUMNS)) $(printf "\U$(( $RANDOM % 500 ))")
        sleep 0.05
done | gawk '{
        c=$4
        letter=$4
        a[$3]=0
        for (x in a) {
                o=a[x]
                a[x]=a[x]+1
                printf "\033[%s;%sH\033[2;32m%s",o,x,letter
                printf "\033[%s;%sH\033[1;37m%s\033[0;0H",a[x],x,letter
                if (a[x] >= $1) {
                        a[x]=0
                }
        }
}'

原文来自http://www.climagic.org/coolstuff/matrix-effect.html

分类: tips 标签: ,

学习commandlinefu的命令行:echo “foo” > /dev/tcp/192.168.1.1/25

2010年8月22日 没有评论

原文来自commandlinefu

echo “foo” > /dev/tcp/192.168.1.1/25

这个命令将发foo消息到192.168.1.1这台机器的tcp端口25上

这个可以用来测试网络链接是否被防火墙所挡

这是tcp的情况

据说udp和icmp的也都行(没测过:)

分类: tips 标签: , , , , ,

commandlinefu的命令行学习:’ALT+.’ or ‘ .’

2010年8月21日 没有评论

原文来自commandlinefu

‘ALT+.’ or ‘<ESC> .’

这其实是两个命令

一个是按出Alt键不放,再敲.键;

另外一个是先敲Esc键,再敲.键

两个功能是一样的

都是取出前一个命令的最后一个参数

不停执行这两个命令之一

会从最后往前取出每个命令的最后一个参数

这个在bash下测试通过

只是在windows下用secure CRT的时候有一个小问题:

‘Alt + .’这个组合不好使

这是因为Secure CRT把Alt键开头的快捷键都指向操作Secure CRT的菜单了

点击Secure CRT的Options–>Session Options,点击Emacs

再勾选”Use ALT as meta key” ,接着点选”Send escape for meta key”

这下

‘Alt + .’也就好使了。

不过说实话

这些小技巧日常工作中真是用的少

我们一般碰到上个命令最后参数巨长而这个命令又要用的时候

一般是用上箭头键↑呼出上一个命令

再用home键到达命令行首

再删掉不需要的部分

敲入需要的部分再执行的。

分类: tips 标签: , , , ,

来自commandlinefu的命令行:!whatever:p

2010年8月19日 没有评论

原文来自commandlinefu

这个命令

!whatever:p

整个是一个word designator

被用冒号(:)分成了event designatormodifiers

!whatever

这个event designator的意思是找出最近执行过的以whatever开头的命令

后面的

:p

这个modifier的意思呢

bash的手册(man bash看)上也有讲:

p      Print the new command but do not execute it.

于是整个命令行的意思就是找出最近执行过的以whatever开头的命令显示出来,不执行

commandlinefu学习之:cp filename{,.bak}

2010年8月18日 没有评论

原文来自commandlinefu

cp filename{,.bak}

这个命令是用来把filename备份成filename.bak的

等同于命令

cp filename filename.bak

这里利用的是bash的brace expansion(大括号扩展)功能

按照bash手册(man bash)所述

bash支持{a,b,c}这样的扩展

比如a{d,c,b}e会被扩展成ade ace abe

所以

filename{,.bak}被扩展成filename filename.bak也就好理解了

来自commandlinefu的命令行学习:^foo^bar

2010年8月17日 没有评论

原文来自commandlinefu

^foo^bar

这个命令用来把上一个命令中第一次出现的foo字串替换成bar字串

然后当做命令执行

bash的manual里是这么解释的

^string1^string2^
Quick  substitution.   Repeat  the  last  command,  replacing  string1  with
string2.  Equivalent to ‘‘!!:s/string1/string2/’’ (see Modifiers below)
这里最后还多了个”^”符号
可是文档上讲
最后那个”^”可以不写
分类: tips 标签: ,

翻译并学习commandlinefu的命令行

2010年8月15日 没有评论

发现一个好网站:commandlinefu

从今天开始

每天从这个网站上选择一个我个人感觉有用的命令行实现

尽我自己的能力来简单解释一下

今天学习的是命令

sudo !!

这条命令sudo的意思大家都知道

关键是!!的含义,在这里是执行上一个命令

也就是history里的最后一个命令(用history命令可以看出)

我man bash看了一下

这里的!!指的是上一个命令,跟!-1是一个意思

同时,还有一些其他的!开头的表达的相关含义:

!n     Refer to command line n.
!-n    Refer to the current command line minus n.
!!     Refer to the previous command.  This is a synonym for ‘!-1’.
!string
Refer to the most recent command starting with string.
!?string[?]
Refer  to  the most recent command containing string.  The trailing ? may be
omitted if string is followed immediately by a newline.
^string1^string2^
Quick  substitution.   Repeat  the  last  command,  replacing  string1  with
string2.  Equivalent to ‘‘!!:s/string1/string2/’’ (see Modifiers below).
!#     The entire command line typed so far.
不过我们在工作中
经常用上箭头来呼出上一条命令(此功能为bash支持)
然后再回车执行
分类: tips 标签: , , , ,

怎样防止bash写操作记录到.bash_history

2010年8月2日 没有评论

linux下
登录用户的操作都会被记到history文件里
(bash下貌似是~/.bash_history)
这样好像不太爽
尤其是想做点敏感操作的时候

于是
简单
登上去
unset HISTFILE
即可

shell程序中for循环的一个小技巧

2009年12月2日 没有评论

在服务器上跑一些命令
经常都会用到简单的shell也算是编程
用的比较多的是for语句

for i in a b c d; do

这样的
但当in后面的列表比较长的时候
往往就不知道怎么写了
今天偶尔翻到bash的faq(?貌似是这个)
发现如果后面是一系列有规律的数字的话可以这样处理:

for i in ((i = 0; i < 10000; i++ ))

这样就行
呵呵
再联想到bash下(())括起来的可以是运算
比如echo $((3+4))
输出是7
那这种写法也就不难理解了

分类: tips 标签: , , , ,