Chinaunix首页 | 论坛 | 博客
  • 博客访问: 442773
  • 博文数量: 127
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-02 20:51
文章分类

全部博文(127)

文章存档

2018年(6)

2015年(18)

2014年(33)

2013年(70)

分类: Python/Ruby

2014-10-17 13:10:00

    花了大概一周时间实现了操作系统自动化部署的脚本,第一次写脚本,遇到了不少问题,下面就遇到的问题做一下汇总:
1、通过getopts获取shell参数的输入

点击(此处)折叠或打开

  1. usage()
  2. {
  3.     echo "Usage: 'basename $0' -n[nmae] -p[path]"
  4.     exit 1
  5. }
  6. while getopts :n:p: optarg
  7. do
  8.     case "$optarg" in
  9.         n)
  10. #        echo "get the name option:$OPTARG"
  11.         ISO_NAME=$OPTARG
  12.         isoname=1
  13.         ;;
  14.         p)
  15. #        echo "get the path option:$OPTARG"
  16.         ISO_PATH=$OPTARG
  17.         isopath=1
  18.         ;;
  19.         ?) echo "error | input incorrect"
  20.         usage
  21.         ;;
  22.     esac
  23. done
这个程序中的:n:p:解释如下:shell中传入的参数-n,-p不能为空,否则执行?)中的代码。getopts命令返回true,所以一般getopts命令使用while循环。

2、shell中if判断条件

点击(此处)折叠或打开

  1. if [ $isoname -eq 1 ]&& [ $isopath -eq 1 ]
  2. then
  3.     if [ ! -s "$ISO_PATH/$ISO_NAME" ]
  4.     then
  5.         echo "error | cannot find the iso, please try again"
  6.     else if grep -q $ISO_NAME file.txt
  7.         then
  8.             echo "error | the iso is alary exit"
  9.         else
  10.             echo "$ISO_NAME $ISO_PATH" >> /shell/file.txt
  11.             echo "ok"
  12.         fi
  13.     fi
  14. else if [ $isoname -eq 0 ] || [ $isopath -eq 0 ]
  15. then
  16.     echo "error | the isoname and isopath is both necessary"
  17.     usage
  18. fi
  19. fi
if条件语句中的[ con ]con前后都有空格,同时if [ ! -"$ISO_PATH/$ISO_NAME" ]判断一个文件是否存在且其内容不为NULL,! -s前后都有空格;可以使用if grep -q $ISO_NAME file.txt来判断变量是否在文件中,如果文件包含该变量,则grep返回0,否则返回1.

3、sed的使用

点击(此处)折叠或打开

  1. sed -in "/file:\/\/\/mnt\/cdrom\//d" CentOS-Media.repo
  2. sed -in "/enabled=0/c\enabled=1" CentOS-Media.repo
  3. sed -in "/file:\/\/\/media\/cdrecorder/a\ file:\/\/\/mnt/cdrom\/" CentOS-Media.repo

  4. sed -in "/server_args/s/\/var\/lib\/tftpboot/\/tftpboot/g" tftp
  5. sed -in "/disable/s/yes/no/g" tftp
这个可以参考自己整理的shell要点文档,这里主要讲的是s选项,用于找到匹配的行,在该行中用一种模式替换另一种模式,像示例中就是用"no"替换"yes".

4、awk的使用
该示例展示了awk如何接受shll变量以及如何传递变量给shell

点击(此处)折叠或打开

  1. eval $(awk -v nvar=$ISO_NAME '{if($1==nvar) printf("ISO_PATH=%s", $2)}' file.txt)
在awk中使用-v nvar=$ISO_NAME可以获取到shell中的变量$ISO_NAME,之后使用nvar即可;同时使用printf可以获取到awk环境下的变量;具体awk使用请参考自己整理的shell要点文档

5、source的使用

点击(此处)折叠或打开

  1. source ./auto_run.sh
这样当前shell环境中的变量可以在auto_run.sh脚本中直接使用。shell脚本其实就是实现一些控制指令,应尽量快的执行,有些大的程序可以使用软连接来替代copy.






阅读(989) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~