《Linux Shell 脚本攻略》学习记录之二

来源:互联网 发布:微信点餐系统源码 编辑:程序博客网 时间:2024/05/16 09:08
时间
查看日期
date "+%d %B %Y"

设置日期和时间
date -s "格式化的日期字符串"

获取脚本执行时间
#!/bin/bash
#文件名: time_take.sh
start=${date +%s}
commands;
statements;

end=$(date +%s)
difference=$(( end - start ))
echo Time taken to execute commands is $difference seconds.

日期格式
日期内容                       格式
星期                           %a %A
月                             %b %B
日                             %d
固定格式日期                   %D
年                             %y %Y
小时                           %I 或 %H
分钟                           %M
秒                             %S
纳秒                           %N
Unix纪元时(以秒为单位)         %s

延时
sleep count

调试脚本
1> 使用选项-x,启动shell脚本的跟踪调试功能:
   $ bash -x script.sh
   运行带-x标志的脚本可以打印出所执行的每一行命令以及当前状态。也可以用sh -x script
2> 使用set -x 和set +x对脚本进行部分调试。
   #!/bin/bash
   for i in {1..6}
   do 
       set -x
  echo $i
  set +x
   done
   echo "Script executed"
 
set -x: 在执行时显示参数和命令,标识将脚本中执行过的每一行都输出到stdout.
set +x:  禁止调试
set -v:  当前命令进行读取时显示输入
set +v:  静止打印输入

管道
$ cmd1 | cmd2 | cmd3 这些命令成为过滤器,使用管道连接每个过滤器,管道操作符是| 
ls | cat -n > out.txt

使用管道并利用子Shell的方式将多个文件的输出组合起来。
例子:
组合两个命令
ls | cat -n > out.txt
>子Shell
cmd_output=$(ls | cat -n)
echo $cmd_output
>反引用
cmd_output=`COMMANDS`
cmd_output=`ls | cat -n`
echo $cmd_output
>利用子Shell创建一个独立进程
pwd;
(cd /bin; ls)
pwd;
当命令在子Shell中执行时,不会对当前shell有任何影响;所有的改变仅限于子
shell内。例如当用cd命令改变子Shell的当前目录时,这种变化不会反映到主shell环境中。
>通过引用子Shell的方式保留空格和换行符
可以放入双引号中,以保留空格和换行符(\n)。
out=$(cat text.txt)
echo $out
1 2 3 #Lost \n spacing in 1,2,3
out="$(cat text.txt)"
echo $out

不使用回车键来读取n个字符
1> 从输入中读取n个字符并存入变量variable_name
read -n 2 var
echo $var
2> 用无回显得方式读取密码
read -s var
3>显示提示信息
read -p "Enter input:" var
4> 在特定的时限内读取输入
read -t timeout var
例如:
read -t 2 var #在2秒内键入字符
5>用特定的字界符作为输入行的结束
read -d delim_char var
例如:
read -d ":" var

运行命令直至执行成功
repeat()
{
    while true
do 
  $@ && return
done
}

一种更快的做法
repeat() {while :; do $@ && return; done}

增加时延
repeat() {while :; do $@ && return; sleep 30; done }

字段分隔符和迭代器
IFS是存储定界符的环境变量。它是当前shell环境使用的默认定界符。
data="name,sex,rollno,location"
oldIFS=$IFS
IFS=, #now
for item in $data
do 
    echo Item: $item
done
IFS=$oldIFS

 
0 0
原创粉丝点击