我觉得Linux比windows好,在这个系统上我找到了久违的激情。我觉得shell和批处理是一个类似的语言(我没用过批处理但是有一种感觉),但是shell用着更爽,linux稳定执行快,就是语法略烦。
1傻逼说不能正则来实现固定的读每天的对账文件,于是写了一个shell脚本,定时完成昨天的对账文件的删除和今天的对账文件的复制,保持ftp目录就一个文件
代码:
#!/bin/sh------------------------------------------------------------------------------------------使用某个shell
#get date
cd /home/aipjt/rpt/ ---------------进入目录
name=POSYCCHK.`date -u +%y%m%d`-------------------当日的时间
cp $name /home/aipjt/yicheng-------------------------------开始复制
if [ $? -eq 0 ];then --------------------------------------------------判断是否复制成功
echo "复制$name成功" >>/home/aipjt/log.txt ------------------------------重定向
else
echo "复制$name失败" >>/home/aipjt/log.txt
fi
name2=POSYCCHK.`date -d last-day +%y%m%d`----------------------------------------生成对账文件的名字
rm /home/aipjt/yicheng/$name2-----------------------------------------实现删除
if [ $? -eq 0 ];then---------------------------------判断上一句命令是否成功。
echo "删除$name2成功" >>/usr/test/dellogs.txt
else
echo "删除$name2失败" >>/usr/test/dellogs.txt
fi
shell的本质其实就是很多命令的批量处理,解释性语言。
这个例子犯的最大的错误就是 if这里,正确的写法是if空格[空格判断空格】;then很不容易发现的错误。
这个例子主要用的date,cp,rm
$?(上一个命令是否正确执行0是正常)
>>重定向内容到文件这个是在一个文件里面累加
>是生成新的文件
··这个符号是在英文状态1的左边,作用是在字符串里面执行命令。 比如 echo " `ls -l "如果没有这个的话 终端会输出ls-l字符串,但是有了的话,就是列出当前目录
写完程序之后要实现定时执行,很明显就要用crontab命令咯,里面是 * * * * * sh脚本的绝对路径。 然后service crond restart起效。ok
不定时更新。
-----------------------------------------------------------------------------2013-12-11---------------------------------------------------------------------------------------
今天忙完了,又开始学习一下shell,输入字符串或者数值,然后一直到输入end就结束程序
#!/bin/sh
while [ 1 -eq 1]
do
echo "please input a number then break until end"
read name
if [ $name = end ];then
break;
fi
done
这个程序遇到的最大的问题是,数值和字符串,eq le这些是比较数值的,但是 = != 是比较字符串。!
第二个shell是1-100的累加
这个是while版的。
#!/bin/sh
i=0
sum=0
while [ $i -le 100 ]
sum=$[$sum+$i]
done
echo "result is :$sum"
这个是for循环版本
#!/bin/sh
sum=0
for num in {100..1}
do
sum=$[$sum+$num]
done
echo "add:"$num
[]这个是进行数学运算。
-----------------------------------------------------------2013-12-12------------------------------------------------------------------------
function:查看某个全路径下是否存在某个目录或者文件如果不存在就进行创建
#!/bin/sh
echo "please input a filename or directory name"
read filename
echo "your input is $filename"
if [ -e $filename ];then
echo "your input is a file"
echo "is exist"
elif [ -d $filename ];then
echo "your input is a directory"
echo "is exist"
else
echo "not exist"
echo "do you want to mkdir[y/n"
fi
read create
if [ $create = y ];then
echo `mkdir $filename`-----------------------------这里有一个致命的漏洞就是都创建成了目录了!!!!!
if [ $? -eq 0 ];then
echo "创建成功"
exit
else
echo "创建失败"
exit
fi
funciton:列出目录下的所有的文件并输出
#!/bin/sh
echo "say hello to files"
cd /usr/test/
num=0
for I in `ls /usr/test/`;do
echo "hello $I"
((num+=1))--------------------------------------数学运算可以这么做省去了$
done
echo "finish the number of files are $num"