shell脚本编程基础总结
一直以来,觉得linux挺好用的,对于一些基本的命令,man一下,或者百度一下都能解决问题,但是如果想用shell做一些自动化一点的事情,还得学好脚本.当然,这里只是说shell脚本.
首先,shell的脚本命令就不罗嗦了,基本都知道,即使不知道也能轻易的查找资料.(当然,有不同版本的shell,都大同小异)
1.1 符号命令
参考:http://blog.csdn.net/taiyang1987912/article/details/39551385
简单来说就是:
涉及算术运算或判断就用(()) , 特别是(())只要括号中的表达式符合C语言运算规则,这一点比较舒服;
我个人习惯是:
如果是涉及一些逻辑条件判断,如果条件表达式复杂就用[[]],如果只有<=2的组合,就考虑用[]
1.2命令行参数
既然是命令,那么参数是怎么调入的,怎么取到参数就很重要了,对吧,如果我们想传个参数就来却不知道怎么得到,那就有点jiong了..
命令行参数是:
$0,$1,$2.....$9是位置参数,$0指向的是实际的命令\程序\脚本\或者函数,
比如就是执行 ./yourScript ref1 ref2...ref4
那么$0就是./yourScript,
$1就是ref1, $2就是ref2.......
特殊参数$*和$@:
$*指向了所有的命令行参数
$@也指向了所有的命令行参数
“$*”将整个参数列表当成一个参数来获取;
“$@”获取整个参数列表,并将他们分割成不同的参数
写个简单测试:
结果
test for "$@" output
/home/
/home/wisdom/
test for "$*" output
/home/ /home/wisdom/
./shell_learn_basic_test.sh 脚本内容:
#!/bin/bash
echo 'test for "$@" output'
for j in "$@"
do
echo $j
done
echo 'test for "$*" output'
for j in "$*"
do
echo $j
done
1.3 检查返回码
知道怎么获取参数了,我们就来看返回嗎相关内容;
我们知道函数有返回值,这个返回码跟返回值是有区别的, (JS代码为例)
function fun1(){
//something
return “code”
}
调用的时候,var myvar=fun1()就是 ”code”
shell在运行命令时,系统会返回一个上一条命令的响应,称为返回码(return code)
如果执行成功,就返回0,如果失败就返回一个不是0的值,获取上一命令的执行状态是
$?
eg:比如我们要检查一个目录是否存在,如果存在就打印一条语句,如果不存在就创建下再打印一个语句.
test -d /home/basic
if [ "$?" -eq 0 ] ## 前2句完全等价于if test -d /home/basic
then
echo "/home/wisdom is a dictionary"
else
# mkdir /home/basic
echo "/home/wisdom is not exit "
fi
区别一下子就出来了吧;
1.4 自定义函数
既然谈到了这里,就来先说自定义函数吧.
自定义函数无非最关注2点, 参数和返回值
调用的方式:fname agr1 arg2,
这里的$1就是表示第一个参数,依此类推,$2就是第二个参数,$3就是第3个参数,$n就是表示第n个参数。
例子:
function sumNum(){
result=0
for((i=1;i<100;i++))
do
result=$(($i+$result))
done
echo "$result"
#return $result
#这里如果我用:return "$result",会没有结果返回; I donnot know why...
}
#here you can use var to get the function's return
var=`sumNum`
# echo `sumNum`
echo $?
echo $var
结果:
0
4950
1.5 shell中的数学运算
参考: http://www.cnblogs.com/craftor/p/3811639.html
但是我觉得关于整数的运算,还是用(())比较舒服;
至于内置的数学运算函数,好像没有呢,知道的告诉我下,谢谢~
1.6 基于时间的脚本的运行
使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令。例如系统管理员安排一个备份任务使其每天都运行,最简单的方式就是在这文件后面添加你要执行的脚本;
以下是 crontab 文件的格式:
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
o minute:区间为 0 – 59
o hour:区间为0 – 2
o day-of-month:区间为0 – 31
o month:区间为1 – 12. 1 是1月. 12是12月.
o Day-of-week:区间为0 – 7.周日可以是0或7.
http://it.100xuexi.com/view/otdetail/20121229/441d6e02-e7b3-488e-9037-0d41f1592e4a.html