Linux Shell脚本攻略-别名+获取并设置日期并延时

别名

# 1. 创建别名
alias new_command='command sequence'
alias install='sudo apt-get install'

# alias命令的效果只是暂时的,一旦关闭终端,所有设置过的别名就失效了
# 为了使别名在所有shell中都可以,可以将其定义放入~/.bashrc文件中
# 每当一个新的交互式shell进程生成时,都会执行~/.bashrc中的命令
echo 'alias cmd="command seq"' >> ~/.bashrc
# 删除别名
# 将其对应的定义从~/.bashrc中删除
# 或者使用unalias命令
# 也可以使用alias example=,这会取消别名example

# 创建一个别名rm,能够删除原始文件,同时在backup目录中保存副本
alias rm='cp $@ ~/backup && rm $@'

创建别名时,如果已经有同名的别名存在,那么原本的别名设置将被新的设置取代

  1. 对别名进行转义
    在创建别名时,很容易会创建出一个和原生命令同名的别名,因而不应该以管理员身份运行别名化的命令
    字符\可以转义命令,从而执行原本的命令。
  2. 列举别名
    使用alias命令来列出当前定义的所有别名
$ alias
alias lc='ls -color=auto'
alias ll='ls -l'
alias vi='vim'

采集终端信息

tput和stty是两款终端处理工具

# 获取终端的行数和列数
tput cols
tput lines

# 打印出当前的终端名
tput longname

# 将光标移动到坐标(100, 100)处
tput cup 100 100

# 设置终端背景色
tput setb n # n可以在0到7之间取值

# 设置终端前景色
tput setf n # n可以在0到7之间取值

# 设置文本样式为粗体
tput bold

# 设置下划线的起止
tput smul
tput rmul

# 删除从当前光标为止到行尾的所有内容
tput ed

# 输入密码时,脚本不应该显示输入内容
# 以下脚本能实现这一需求
#!/bin/sh
# Filename: password.sh
echo -e "Enter password: "

# 在读取密码前禁止回显
stty -echo
read password
# 重新允许回显
stty echo
echo
echo Password read.
# stty命令的-echo选项禁止将输出发送到终端,而选项echo则允许发送输出

获取并设置日期并延时

延时可以用来在程序执行过程中等待一段时间(比如1秒),或是每隔几秒钟(或是几个月)监督某项任务

日期能以多种格式呈现。在系统内部,日期被存储成一个整数,其取值为自1970年1月1日0时0分0秒其所流逝的描述。这种计时方式称为纪元时或Unix时间

# 读取日期
$ date
Thu May 20 23:09:04 IST 2010

# 打印纪元时,date命令可以将很多不同格式的日期转换为纪元时,这就允许使用多种日期格式作为输入
$ date +%s
1290047248

# 将日期转换成纪元时
$ date --date "Wed mar 15 08:09:16 EDT 2017" +%s
1489579718
# 选项--date指定了作为输入的日期
# 根据指定日期找出这一天是星期几
$ date --date "Jan 20 2001" +%A
Satrurday

# 用带有前缀+的格式化字符串作为date命令的参数,可以按照选择打印出相应格式的日期
$ date "+%d %B %Y"
20 May 2010

# 设置日期和时间
# date -s "格式化的日期字符串"
# date -s "21 June 2009 11:01:22"

# 如果系统已联网,可以使用ntpdate来设置日期和时间
/usr/sbin/ntpdate -s time-b.nist.gov

# 优化代码,date可以用于计算一组命令所花费的执行时间
#!/bin/bash
# 文件名: time_take.sh
start=$(date +%s)
commands;
statements;
end=$(date +%s)
diff=$(( end - start ))
echo Time taken to execute commands is $diff seconds
# date命令的最小精度是秒,对命令即使的另一种更好方式是使用time命令
time commandOrScriptName

Unix纪元时被定义为世界标准时间(Coordinated Universal Time, UTC)1970年1月1日0时0分0秒起至当前时刻的总秒数,不包括闰秒。当计算两个日期或两段时间的差值时,需要用到纪元时。将两个日期转换为纪元时并计算出两者之间的差值。

# 下面的命令计算了两个日期之间相隔了多少秒
sec1=`date -d "Jan 2 1970"`
sec2=`date -d "Jan 3 1970"`
echo "There are `expr $sec2 - $sec1` seconds between Jan 2 and Jan 3"
日期内容·格式
工作日%a(例如:Sat)
%A(例如:Saturday)
%b(例如:Nov)
%B(例如:November)
%d(例如:31)
特定日期格式(mm//dd/yy) %D(例如:10/18/10)
%y(例如:10)
%Y(例如:2010)
小时 %I或%H(例如:08)
分钟 %M(例如:33)
%S(例如:10)
纳秒 %N(例如:695208515)
Unix纪元时(以秒为单位) %s(例如:1290049486)
# 在脚本中生成延时
#!/bin/bash
# FileName: sleep.sh
echo Count:
tput sc # 存储光标位置

# 循环40秒
for count in `seq 0 40`
do
	tput rc # 恢复之前的存储的光标位置
	tput ed # 清除从当前光标位置到行尾之间的所有内容
	echo -n $count
	sleep 1
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值