❶ linux系统用shell写个脚本ftp上传下载文件,文件名带日期。
这个不是一句话搞定的
vi xxxx.sh 写一个脚本
#/bin/bash
DATE=`date "%Y%M%D"`
DIR=/xxxxx/xxx
cd $DIR
lftp -pxxx [email protected]
cd xxxxx
get $DATE.txt
exit
chmod +x xxxx.sh
然后 sh xxxx.sh
大致的结构这样,具体的你要好好研究一下shell才可以。
❷ 如何正确在Linux Shell脚本中定义一个时间变量
1、创建脚本 test.sh,并入截图内容。
❸ 求助大神:编写一个shell 脚本 ,移动某个文件夹下的文件到各自的日期组成的目录下
1、主要是从文件名截取出日期,如果固定了位数
2、可以先缺则按_分割取第二段
echo $file|awk -F\_ '{print $2}'
3、然后再取第4位后面拦扮仿的8位
4、简纤例如:vi a.sh
#!/bin/sh
for file in `ls *.jpg`;do
echo $file
datedir=$(echo $file|awk -F\_ '{print $2}'|awk '{print substr($1,4,8)}')
mkdir $datedir
/bin/mv $file $datedir
done
❹ 请教如何在shell脚本中得到系统当前时间
在shell脚本里常常需要获取系统时间来处理某项操作,今天系统的学习了一下如何获取系统时间。记录如下:
linux的系统时间在shell里是可以直接调用系统变量的如:
获取今天时期:`date +%Y%m%d` 或 `date +%F` 或 $(date +%y%m%d)
命令输出结果如下:
[root@centi-C sh]# date +%Y%m%d
20120727
[root@centi-C sh]# date +%F
2012-07-27
[root@centi-C sh]# date +%y%m%d
120727
获取昨天时期:`date -d yesterday +%Y%m%d` 也可以写成`date -d -1day +%Y%m%d`
[root@centi-C sh]# date -d yesterday +%Y%m%d
20120726
[root@centi-C sh]# date -d yesterday +%F
2012-07-26
[root@centi-C sh]# date -d -1day +%y%m%d
120726
[root@centi-C sh]# date -d -1day +%Y%m%d
20120726
获取前天日期:`date -d -2day +%Y%m%d`
依次类推比如获取10天前的日期:`date -d -10day +%Y%m%d`
或n天前的 `date -d "n days ago" +%y%m%d`
明天:`date -d tomorrow +%y%m%d`
注意以上中间有空格
至于你需要什么样的日期时间格式,就需要应用相关的时间域参数来实现咯
相关时间域如下:
% H 小时(00..23)
% I 小时(01..12)
% k 小时(0..23)
% l 小时(1..12)
% M 分(00..59)
% p 显示出AM或PM
% r 时间(hh:mm:ss AM或PM),12小时
% s 从1970年1月1日00:00:00到目前经历的秒数
% S 秒(00..59)
% T 时间(24小时制)(hh:mm:ss)
% X 显示时间的格式(%H:%M:%S)
% Z 时区 日期域
% a 星期几的简称( Sun..Sat)
% A 星期几的全称( Sunday..Saturday)
% b 月的简称(Jan..Dec)
% B 月的全称(January..December)
% c 日期和时间( Mon Nov 8 14:12:46 CST 1999)
% d 一个月的第几天(01..31)
% D 日期(mm/dd/yy)
% h 和%b选项相同
% j 一年的第几天(001..366)
% m 月(01..12)
% w 一个星期的第几天(0代表星期天)
% W 一年的第几个星期(00..53,星期一为第一天)
% x 显示日期的格式(mm/dd/yy)
% y 年的最后两个数字( 1999则是99)
% Y 年(例如:1970,1996等)
注意:只有超级用户才有权限使用date命令设置时间,一般用户只能使用date命令显示时间。
添加一个练习脚本,功能:
在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下。
#/bin/bash
#filebak
#file executable: chmod 755 filebak
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
bakdir="/root/bak/"
filename="`date +%y%m%d`_etc.tar.gz"
if [ ! -x "$bakdir" ];then
mkdir $bakdir
fi
cd $bakdir
tar cvfz $filename /etc
或使用crontab -e 命令添加定时任务:
0 1 * * * /bin/sh /usr/bin/fileback
❺ 编写shell脚本,提示用户从键盘输入当天的日期,日期格式为XX/XX/XXXX,如果输入正确,则显示:
#!/bin/bash
read -p "please enter the date: " date
if [[ $date =~ "[0-9]{2}/[0-9]{2}/[0-9]{4}" ]]
then
echo "today is:${date:0:2} month is:${date:3:2} year is:${date:6:4}"
else
echo "wrong date"
fi
我没有对日期范围做校验,你可以自己加一下。
❻ Shell之date命令用法
date命令在shell脚本中用处很大,比如要在脚本中标记一个日志或者针对某个文件做更改,就可以使用date给它做一些装饰,比如每天备份mysql,最终生成一个.sql的文件,那么我们就可以针对这个文件加一个日期的标记,这样就可以很清晰的知道我们备份的这个文件是哪一天生成的或者周几生成的,等到下一个对应的周几,此时备份的sql文件就会自动地将上一个周同一天的备份文件覆盖掉,这样就不用删除文件
1、date
# date //显示系统当前日期和时间
上面是date命令默认的输出格式,我们也可以将输出格式显示为英文
# LANG=en 姿山 //将系统环境变量LANG设置为英文格式
# date //然后执行date命令,结果如下
2、年月日
我们标记日期的方式一般的格式是:20180321 、 180321
# date +%Y //year,输出4位数年
# date +%y //输出2位数的年
# date +%m //m表示month,输出的结果是月份
# date +%d //d表示day,日
# date +%D //D表示特殊格式的日期表示方法,如下当前日期为2018年3月21日
我们还可以将上面的年月日组合在一起输出
# date +%Y%m%d //输出年月日
# date +%F //输出的年月日会用连字符隔开
3、时分秒
# date +%H //H表示hour小时
# date +%M //M表示minute分钟
# date +%S //S表示second秒
# date +%s //输出结果是一个时间戳,表示距离1970年1月1日0时0分过橘正去多少秒
# date +%T //以下面格式输出时分秒
# date +%H:%M:%S //效果跟上条命令一样
4、星期
# date +%w 圆册悔 //输出结果为星期几,比如下图表示当前系统时间是星期三
# date +%W //表示当前为今年的第几周,比如我这里为今年的第12周
5、日历
# cal //展示日历
6、从当前时间往前或往后推算
使用场景:比如我们切割日志在今天的0时0分,那么被切割出去的日志应该以昨天的日期来标记,因此需要倒推一天
# date -d "-1day" //当前系统时间为3月21日,输出结果为3月20日
# date -d "-1day" +%F
# date -d "-1 month" +%F //上个月
# date -d "-1 year" +%F //表示去年,year后面也可以加上s,day和month后也可以加上s
其他的时分秒也诸如此类
7、时间戳
# date +%s //获取时间戳
# date -d @1521563928 //将时间戳换算成日期
# date +%s -d "2017-03-21 00:38:48" //将日期换算成时间戳
❼ 用shell写一个脚本按日期循环执行某一条命令怎么写
[ $? -eq 0 ] && echo '成功' || echo '失败'
[root@centos~]# ls
anaconda-ks.cfg install.log install.log.syslog rpmbuild
[root@centos~]# [ $? -eq 0 ] && echo '成功' || echo '失败'
成功
[root@centos~]# lsss
-bash: lsss: command not found
[root@centos~]# [ $? -eq 0 ] && echo '成功' || echo '失败'
失败
[root@centos~]#