1:实现命令的重定向到变量
test=$(ps -A |grep adpush)
echo $test
if [ "$test" == "" ]; then
echo "no =="
else
echo $test
./adpush # 这种方式只能用于当前目录或环境变量的执行文件,如果想运行其他目录的文件
# 则需要进入那个目录再运行 即: cd /dest ./run.sh
../../adpush
./db_exec
fi
2:第一个功能的代替
#!/bin/sh
COUNTER=0
while [ $COUNTER -gt -1 ]
do
RES=`ps -ef | grep program_name|grep -v grep | wc -l`
if [ "$RES" -lt "1" ]
then
./program_name &
fi
sleep 60
done
3:针对ssh连接服务器后,脚本在断开ssh就停了的问题
nohup : http://www.21andy.com/blog/20071121/677.html
screen: https://www.ibm.com/developerworks/cn/linux/l-cn-screen/
直接在运行命令前加上nohup nohup ./abcd
screen暂时还没看
4:字符串匹配
if echo $line | grep -qE ".+new conn.+192.168.20.186.+"
5:操作数据库
转载网友 http://blog.csdn.net/hbcui1984/archive/2010/01/03/5125387.aspx
#!/bin/bash
us='GreeNet'
pw='dbholonet'
mysql -u$us -p$pw -e"use gnadpush;delete from watchtable"
#/usr/bin/mysql -u $us -p$pw <<EOF
# use gnadpush;
#delete from watchtable;
#EOF
6: 批量更改文件名
最近需要干这么件事,把当前文件夹下文件名含有eee的都改成大写的EEE,比如21-eee.doc就要改成21-EEE.doc。
写了个shell脚本,会sed就不难了:
for filename in *eee*; do newname=`echo $filename|sed -n ’s/eee/EEE/p’`; mv $filename $newname;done
如果写成结构化会更清晰:
for filename in *eee*
do
newname=`echo $filename|sed -n ’s/eee/EEE/p’`
mv $filename $newname
done
7:引用上个命令的参数
!$ 表示上一个命令的最后一个参数。如果你首次登陆终端,那么它会取history的最后一行命令的最后一个参数。
试试看!
ls -hl /rocrocket/software/program/git/bin/
这时,你就可以用cd !$来进入到这个深层目录啦!
ps: 如果你最后一个参数是双引号括起来的,那么!$也会很聪明的看出来。
8:
1、写脚本实现,在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。
2、写脚本实现,把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。
解答思路:
1: for filename in `find /tmp -type f -name "abc*"|head -n 100`
do
sed -n '1p' $filename>>new
done
2:find /tmp -type f -name “abc*”|head -n 100|xargs head -q -n 1
3:awk ‘NR==FNR{a[$0]=1}NR!=FNR&&!a[$0]{print > “c”}’ a b
4:diff t1 t2 | grep “<" | sed 's/^ tt ; cat tt | wc -l
5:diff b a | sed ‘/^>/d’| sed ’s/c
6::grep -v -x a.txt -f b.txt | wc -l
7:sort a > a2 ; sort b > b2 ; comm -23 a2 b2 | wc -l