/**************************************
*shell 基本使用方法
**************************************/
标准文件描述符
bash shell保留linux文件描述符中的前三个(0、1和2)。
Linux标准文件描述符
文件描述符 缩写 描述
0 STDIN 标准输入
1 STDOUT 标准输出
2 STDERR 标准错误
重定向错误信息
示例:
ls -al badfile 2> test4
ls -al test test2 test3 &> test4
&> 是命令所有的输出都会重定向到同一位置。
临时和永久重定向
临时重定向
echo "this is a error message" >& 2
./test 2> test9
永久重定向
使用exec命令在shell执行期间重定向到某一个特定文件
#!/bin/bash
exec 1>testout
exec 2>testout_error
echo "this is a test for > "
echo "this ia a std error test!"
脚本输入重定向
exec 0 < testfile
lsof 列出打开的文件描述符
使用
lsof -a -p && -d 0,1,2
lsof默认输出
列 描述
COMMAND 正在运行命令的前九个字符
PID 进程的PID
USER 进程属主登录名
FD 文件描述符以及访问类型 r读 w写 u读写
TYPE 文件类型 CHR 字符型 BLK块型 DIR目录 REG常规文件
DEVICE 设备的设备号
SIZE 文件大小
NODE 文件的本地节点
NAME 文件名
tee指令
teefile name
date | tee testfile
追加文件的:date | tee -a testfile
控制脚本
捕获脚本退出信号
示例
#!/bin/bash
trap "echo exit signal..." EXIT
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
修改和移除捕获
#!/bin/bash
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
trap "echo 'I modified the trap!'" SIGINT
count=1
while [ $count -le 5 ]
do
echo "Second Loop #$count"
sleep 1
count=$[ $count + 1 ]
done
后台运行脚本
./test.sh &
Jobs 命令
jobs命令可以查看分配给shell的作业,jobs命令会显示两个停止和运行中的作业。以及他们的作业号和作业中的命令。
jobs命令擦书
参数 描述
-l 列出进程PID以及作业号
-n 只列出上次shell发出的通知后改变状态的作业
-p 只列出作业的PID
-r 只列出运行中的作业
-s 只列出已停止的作业
定时运行脚本
at命令格式如下:
at [-f filename] time
at -M -f test12.sh teatime
cron时间表
min hour dayofmonth month dayofweek command
使用示例:
cron 00 12 1 * * command
linux系统中包含指定的cron目录:
/etc/cron.* 目录中,只需要把需要执行的脚本文件放在这个目录中,系统会自动执行。