别名
# 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 $@'
创建别名时,如果已经有同名的别名存在,那么原本的别名设置将被新的设置取代
- 对别名进行转义
在创建别名时,很容易会创建出一个和原生命令同名的别名,因而不应该以管理员身份运行别名化的命令
字符\可以转义命令,从而执行原本的命令。 - 列举别名
使用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