在脚本里用代码代替交互式输入操作:
参考:http://os.51cto.com/art/200912/167898.htm
1.安装shell工具expect:yum -y install expect*
2.记得在文件头去掉“#!/bin/bash”,并引入“#!/usr/bin/expect”
3.执行时,不能使用sh命令(bash脚本才用这个,即不需要"sh test.sh"),而是直接“./test.sh”即可
如何删除n天前的旧文件:
语句格式:
find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;
范例:
find /tmp -mtime +10 -name "*.*" -exec rm -rf {} \;
将/tmp目录下所有10天前带"."的文件删除
具体解释:
find:查找命令,用来查找指定条件的文件
/tmp:想要进行清理的任意目录
-mtime:标准语句写法
+10:查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件
"*.*":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三
-exec:固定写法
rm -rf:强制删除文件,包括目录
{} \; :固定写法,一对大括号+空格+\+;
ps:find命令详解
shell程序的If-Else语句使用注意事项:
1、if 与[ 之间必须有空格
2、[ ]与判断条件之间也必须有空格
3、]与; 之间不能有空格
范例:
##如果该目录不存在,则创建
if [ ! -d "$backupPath" ];then
mkdir "$backupPath"
else
##如果该文件不存在
if [ ! -f "$myFile" ]; then
fi
##删除超过指定天数的旧文件
##find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;
find $backupPath -mtime +1 -name "*.*" -exec rm -rf {} \;
fi
关于shell脚本如何获取当前路径并保存到变量:
#!/bin/sh
scriptPath1=`pwd` ##注意是单引号
scriptPath2=$(cd `dirname $0`; pwd) ##注意是单引号
echo "$scriptPath1"
echo "$scriptPath2"
这两种方式都可以获取脚本程序的当前目录(绝对路径)
解释:
关于`dirname $0`
在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的。因为他返回当前路径的".",这个命令要写在脚本文件里才有作用
$0:表示当前Shell程序的文件名
dirname $0:表示获取当前脚本程序的路径
cd `dirname $0`:表示切换到当前脚本程序的目录
查看系统目前有哪些版本的shell:cat /etc/shells
Linux Shell 如何 debug :
只需在sh命令后加上参数即可
-n :不要执行 scripts ,查询 scripts 内的语法,若有错误则予以列出!
-v :在执行 scripts 之前,先将 scripts 的内容显示在屏幕上;
-x :将有使用到的 scripts 内容显示在屏幕上,与 -v 稍微不同!
运算符号 代表意义
= 等于
!= 不等于
< 小于
> 大于
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于或等于
-ge 大于或等于
-a 双方都成立(and)
-o 单方成立(or)
-z 空字符串
-n 非空字符串
export命令:将自定义变量转成环境变量
注意:子进程不会继承父进程的自定义变量