Shell编程
文章平均质量分 61
firefoxbug
这个作者很懒,什么都没留下…
展开
-
目录拷贝–bash实现
刚开始看shell,写了一个bash的小程序,功能是将原目录下的所有子目录都复制到目的目录,但是不复制里面的文件。能够用于某些场合:比如需要原来的文件目录结构,但是里面的内容却是需要更新的。下面的代码都是在我自己的电脑上测试的,路径稍微改动下就OK!#!/bin/shfunction usage(){ echo "Input such as : " echo "$0 source_di原创 2012-01-28 22:34:40 · 1967 阅读 · 0 评论 -
linux下默认删除文件到回收站(bash实现)
fedora下总是会把文件不小心删除了,所以下面的脚本把实现:文件删除默认移动到自己的回收站里面。功能:脚本实现删除文件或者目录到~/waste/(自己定义)。脚本附带文件名或者目录名,则默认代表”删除”,移动到回收站。参数 -l 代表列出回收站内容,后面不带参数则列出所有内容,可以指定文件或者目录。-d 代表清空回收站,后面不带参数为清空回收站,也可以指定删除文件原创 2012-04-16 09:18:59 · 2555 阅读 · 0 评论 -
bash编程中反引号
反引号(` `):能把shell中一个命令的标准输出嵌入到原来的位置!也叫做是命令替换,于它等价的是$(cmd)。#!/bin/bashls -l /`ls -l / | awk {print $5}`看上面的脚本,第一个输出是正常的,第二个就不正常的,但是第三个也不正常了。# ls -l / | awk {print $5}这个命令能列出文件的大小,返回的值原创 2012-05-11 20:58:57 · 5630 阅读 · 0 评论 -
find+*的问题
不久前做移植的时候想把某个目录下的C文件都找出来,然后拷贝下,结果一直报错,我用的是*.c作为pattern。今天看论坛的时候知道为什么了。$ ls test2.c test.c test.txt目录下有两个.c文件,还有一个.txt文件$ find . -name *.cerror : find: 路径必须在表达式之前: test.c用法: f原创 2012-05-30 23:52:29 · 2929 阅读 · 1 评论 -
while read loop
#!/bin/bashres=0cut -d: -f3 /etc/passwd | while read linedo if [ $line -ge 500 ] then let res++ echo $res fidoneecho $res脚本实现的功能就是统计UID大于500的项之和。下面是输|出结果123456789100为什么原创 2012-07-04 11:45:27 · 3753 阅读 · 0 评论 -
C语言代码行数统计bash实现
写了一个比较粗糙的C语言代码行数统计脚本,目前还有些bug,而且效率也不高。脚本主要就是去除大部分的注释后统计行数,相当于做了一部分预处理的工作。下面是代码:#!/bin/bash filename=$1echo "`whoami`"if [ $# -lt 1 ];then echo "usage : ./scripts filename" exit -1fiif [ ! -原创 2012-06-25 09:59:53 · 1591 阅读 · 0 评论 -
shell执行过程简介
[root@fire cgi-bin]# export TEST="Hello> Wolrd> From> Linux"[root@fire cgi-bin]# echo $TEST Hello Wolrd From Linux[root@fire cgi-bin]# echo "$TEST" HelloWolrdFromLinux[root@fire cgi-bin]# e原创 2012-06-26 14:29:57 · 2757 阅读 · 0 评论 -
trap linux
trap命令用于指定在接收到信号后将要采取的行动,trap命令的参数分为两部分,前一部分是接收到指定信号时将要采取的行动,后一部分是要处理的信号名.信 号说 明HUP(1)挂起,通常因终端掉线或用户退出而引发INT(2)中断,通常因按下Ctrl+C组合键而引发原创 2012-06-30 11:43:29 · 2185 阅读 · 0 评论 -
awk基础学习
awk 处理流的形式也是一行一行的,读取一行然后按照指定的模式进行处理,处理完成后默认输出到终端。awk [-F fild:separator] 'command' filename[-F fild-separator ]是可选的,awk默认以空格作为缺省的分隔符号,在脚本中可以通过FS=“X”来设定,X是任意分割符。表达式匹配的特殊字符\ ^ $ . [ ] | ( ) *原创 2012-07-02 16:02:51 · 1110 阅读 · 0 评论 -
linux 守护进程编程
守护进程简介守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母原创 2012-11-05 10:54:26 · 1241 阅读 · 0 评论 -
Mysql 数据库自动备份Shell脚本
#!/bin/bash#Shell Command For Backup MySQL Database Everyday Automatically By Crontab USER=rootPASSWORD="123456"DATABASE="test"HOSTNAME="192.168.156.61" [email protected] BACKUP_DIR=/hom原创 2012-12-02 21:39:40 · 12413 阅读 · 3 评论 -
inotify 安装
传统的rsync+crontab同步数据和实际会有差异,而inotify则基本可以达到实时的效果,当文件有任何变动,就会触发inotify。inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。inotify安装完成之后会有两个命令,inotifywait 和 inotifywatch。inotifywait原创 2012-12-02 21:55:35 · 10407 阅读 · 0 评论 -
Linux注册系统服务
注册一个系统服务,开机自启动.1 脚本编写#vim test.sh#!/bin/bash#description: hello.sh#chkconfig: 2345 20 81EXEC_PATH=/usr/local/EXEC=hello.shDAEMON=/usr/local/hello.shPID_FILE=/var/run/hello.sh.pid.原创 2012-12-23 17:08:36 · 4689 阅读 · 0 评论 -
puppet安装和使用
puppet是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小原创 2013-01-26 17:38:26 · 7701 阅读 · 0 评论 -
子shell的$$
下面是一段代码,我偶然发现有点问题。#!/bin/bashTestID(){ echo "in function : $$"}TestID &echo "\$! : $! "echo "\$\$ : $$ "sleep 1[firefox@fire ShellPractice]$ ./stopped.sh$! : 15021$$ : 1原创 2012-04-04 18:30:28 · 10109 阅读 · 1 评论 -
FIFO管道
写脚本的时候用到FIFO,不是很会,就学习了下。下面是简介:FIFO也称为有名管道,它是一种文件类型。FIFO简单理解,就是它能把两个不相关的进程联系起来,FIFO就像一个公共通道,解决了不同进程之间的“代沟”。普通的无名管道只能让相关的进程进行沟通(比如父shell和子shell之间)。还是用代码来说明问题好了。下面我模拟了一个FIFO通信的过程,主要有两个进程。原创 2012-03-15 21:43:10 · 8282 阅读 · 0 评论 -
sed变量替换问题
下午在写一段shell脚本的时候,遇到了一个问题,就是在sed里面的变量替换不了。sed‘s/^$srcdir/test/g’/tmp/src_temp_dir.txt > /tmp/des.txt上面srcdir变量里面存的是一个文件的完整路径,文件里面也是一些路径的字符串。我想把原来文件里的路径都换了。结果就是换不了,弄了很久才怀疑是$srcdir没有解释出来,结果去网原创 2012-01-28 19:23:37 · 3080 阅读 · 0 评论 -
shell中位置变量参数
$# : 传递到脚本的参数个数$* : 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过 9个$$ : 脚本运行的当前进程 ID号$! : 后台运行的最后一个进程的进程 ID号$@ : 与$#相同,但是使用时加引号,并在引号中返回每个参数$- : 显示shell使用的当前选项,与 set命令功能相同$? : 显示最后命令的退出状态。 0表示没有错误,原创 2012-01-30 17:02:09 · 6495 阅读 · 0 评论 -
if语句–shell
在bash编程中也有最基本的条件测试,if和test。下面是一些基本的实例文件拷贝输出检查 #!/bin/bash#cpFileif cp ./hello.c ../hello2.c; thenecho "copy file successfully"exit 0elseecho "copy file error" 2>&1exit 1fi判断是否处于根目原创 2012-02-04 21:00:05 · 957 阅读 · 0 评论 -
for语句–shell
for 变量名 in 列表do 命令1 命令2…done打印字符串列表#!/bin/bash#打印字符串到结束,包括空格for loop in "orange red blue grey "doecho "this is fruit $loop"donefor循环使用ls命令#!/bin/bashfor loop in 'ls 'do$原创 2012-02-05 15:17:47 · 2688 阅读 · 0 评论 -
while语句–shell
while 命令do 命令1 命令2 ...donewhile循环计数#!/bin/bash#while testiCounter=0while [ $iCounter -lt 5 ]do iCounter=`expr $iCounter + 1` echo $iCounterdone使用while循环读键盘输入#原创 2012-02-06 16:56:08 · 5856 阅读 · 1 评论 -
模式匹配运算符–Shell
Var=/home/firefox/MyProgram/fire.login.name${Variable#pattern}:如果模式匹配于变量值的开头处,则删除匹配的最短部分,并且返回剩下的部分例子:[fire]$ echo ${Var#*/}[fire]$ home/firefox/MyProgram/fire.login.name[fire]$ echo ${Var#/*原创 2012-02-23 22:51:00 · 2072 阅读 · 0 评论 -
统计文本中单词使用频率
#!/bin/bash#统计单词的频率if [ $# -lt 1 ]; thenecho "usage : $0 filename"fi filename=$1cp $filename $1_backupif [ ! -f $filename ]; thenecho "$filename is not a file"fitemp=$1_tempcat $filen原创 2012-03-02 15:32:38 · 1293 阅读 · 0 评论 -
打包和压缩Bash实现
用bash写了一个打包和压缩的脚本,代替bzip2和tar的繁琐参数,最好把脚本放到全局环境变量中。#!/bin/bash#用脚本使用形式function usage(){ echo "usage : `basename $0` [-c|-t|-x] FileName "}#脚本参数含义function help(){ echo "-c 打包并压缩文件" ech原创 2012-03-03 14:55:46 · 1792 阅读 · 0 评论 -
Shell脚本中cd命令使用
在写shell脚本的时候发现cd切换目录的时候无法切换,代码是下面的。#!/bin/bash#changedir.shcd /home/firefoxpwd我仔细一想,我执行的时候是./changedir.sh来执行的,这样执行的话终端会产生一个子shell,子shell去执行我的脚本,在子shell中已经切换了目录了,但是子shell一旦执行完,马上退出,子shell中的变量和操作原创 2012-03-04 10:13:25 · 73091 阅读 · 3 评论 -
pushd,popd,dirs–Bash实现
#!/bin/bash #实现pushd popd dirs功能#mypush函数实现pushd命令的功能,每次支持压栈一个目录#缺省目录是当前目录,所有目录保存在_DIR_STACK变量中,#以:做为分隔符。function mypush(){ REQ="$1" #接受参数1是目录参数 REQ="${REQ:-.}" #如果参数1是空,则 if [ ! -d $REQ ];原创 2012-03-05 21:32:11 · 1465 阅读 · 0 评论 -
API扫描器小结
不久前,冏哥叫我写一个API的扫描器,具体的要是先的功能就是扫描API,当然是用shell实现。我这个shell语法都有点问题的小青年写的可是够呛人的。下面是有一些语法的问题,我记录下。小数比较大小$ echo “2.0>1.2″ | bc如果正确就返回1,否则返回0。字符串连接#!/bin/bashi=1while read ISBNdo原创 2012-03-27 16:18:27 · 1779 阅读 · 0 评论 -
shell 编程中空格的使用–< 转>
from http://blog.csdn.net/panda19881/article/details/66267271.定义变量时, =号的两边不可以留空格.eg:gender=femal————rightgender =femal———–wronggender= femal———–wrong2.条件测试语句 [ 符号的两边都要留空格.eg:if [转载 2012-03-10 21:16:52 · 835 阅读 · 0 评论 -
bash中"["的误区
纠结一段代码好几天,Linux下不会看反汇编,不知道shell里面怎么跑,于是栽了个跟头。#!/bin/bashSTR1="Hello"STR2="World"if [ "$STR1"=="$STR2" ]; then #"=="两边没有空格 echo "$STR1 == $STR2"else echo "$ST原创 2012-03-12 19:30:52 · 1392 阅读 · 2 评论 -
shell 字符串操作
string="abcABC123ABCabc"字符串长度:echo ${#string} #15echo `expr length $string` #15索引用法:expr index $string $substringexpr index $string "ABC" #4提取子串用法:${string:position}echo ${st原创 2013-06-08 16:18:40 · 2485 阅读 · 0 评论