一、编程习惯
1. 主要环境变量的宣告:PATH, LANG
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
2. exit 0(可作为错误码)
3. 在sh脚本前写一些注释是一个好的习惯
二、 ` ` $( ) ${ } expr $(( )) []
1.
所有UNIX命令,要取结果或输出,都要用$( )或反引号` `
$(ls -l)
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
将过去24小时(-mtime –2则表示过去48小时)内修改过的文件tar在一起
2. ${i}是区分其后紧接的字符串,避免“连读
${i}可以在任何场合替代普通变量$i
3. expr 数学表达式
shell语言里没有运算公式,必须借助expr语句实现:
expr 变量 ‘+-x /’ 变量
expr $a '+' $b
运算符号都要加引号,单引号双引号均可
为什么if expr 3 '+' 2 得5,但if仍走then ? 非0应该走else啊
因为expr表达式返回的是"返回值",不是"结果"
4. 另一种运算格式i++如何实现?------ i=$(($i+1))
(( ))与[ ]作用完全相同
i=$(($i+1))
i=$[$i+1]
三、script的执行方式
1. .和sh命令:子程序执行,新的进程(or线程)
2. source命令:父程序中执行,和父程序相同进程
3. test:像SQL中的SET NOEXEC ON
可以部分的替代if
4. []:和IF类似:[ "$name" == "VBird" ]; echo $?
四、参数
1.
$# :代表后接的参数『个数』,$0是脚本文件名;
$@ :代表『 "$1" "$2" "$3" "$4" 』之意,每个变量是独立的(用双引号括起来);相当于数组;没有参数为null
$* :代表『 "$1c$2c$3c$4" 』,其中 c 为分隔字符,默认为空格键, 所以本例中代表『 "$1 $2 $3 $4" 』,相当于字符串;没有参数就为空字符串
2. shift:造成参数变量偏移
shift n(默认为1)
五、date
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
说明 :
date 可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :
时间方面 :
% : 印出 %
%n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
日期方面 :
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数
参数 :
-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
--version : 显示版本编号
例子 :
显示时间后跳行,再显示目前日期 :
date '+%T%n%D'
显示月份与日数 :
date '+%B %d'
显示日期与设定时间(12:34:56) :
date --date '12:34:56'
六、条件语句if ;then
1. if...;then...elif...;then...fi
if [ $a = $b ];then ——=和==等效
echo "equal!"
else
echo "not equal!"
fi
七、case...esac
case $1 in
"hello")
echo "Hello, how are you ?"
;;
"")
echo "You MUST input parameters, ex> {$0 someword}"
;;
*) # 其实相当于default
echo "Usage $0 {hello}"
;;
esac
阅读(746) | 评论(0) | 转发(0) |