• 注册
  • 关于作者
    达人认证:程序员
    关注 1 粉丝 1 喜欢 0 内容 106
    广东省·广州市
    聊天 送礼
    • 查看作者
    • shell脚本的一些注意事项

      ssh user@server bash < /path/to/local/script.sh
      ssh到远程服务器执行一个脚本,此命令可以避免将脚本上传到远程服务器

      ssh user@host cat /path/to/remotefile | diff /path/to/localfile -
      比较远程文件和本地文件的差异

      vim scp://username@host//path/to/somefile
      vi一个远程文件

      curl ifconfig.me
      在内网下查看公网ip

      echo ${#a}
      取变量字符个数

      FUNCNAME
      函数名变量,打印该变量会输出当前的函数名称

      一.变量命名
      1.变量命名前后规则统一
      COUNT=
      Sum=

      2.避免无含义字符或数字,例如下面的18,谁知道代表什么含义呢
      -------------------错误写法-------------------
      if [[ $count -gt 18 ]]
      then
      commmand
      fi
      ----------------------------------------------

      -------------------正确写法-------------------
      Process_Limit=18
      if [[ $count -gt ${Process_Limit} ]]
      then
      commmand
      fi
      ----------------------------------------------

      3.全局变量在脚本初始化的时候定义,一般是一些配置参数, 尽量少的使用全局变量

      4.函数内的局部变量使用local声明
      func_test_1()
      {
      local test=1
      echo $test
      }

      5.变量合并
      如果某些变量需要组合起来才有意义时,例如文件路径等,请将组合起来的值赋予一个变量,这样以后修改起来方便
      log_dir=/opt/log
      log_name=website.log
      -------------------错误写法-------------------
      if [[ ! -f ${log_dir}/mam/${log_name} ]]
      then
      touch ${log_dir}/mam/${log_name}
      fi
      ----------------------------------------------

      -------------------正确写法-------------------
      log_file=${log_dir}/${log_name}
      if [[ ! -f ${log_file} ]]
      then
      touch ${log_file}
      fi
      ----------------------------------------------

      6.异常判断,判断变量名是否存在,对于输入变量,还需要判断变量名的合法性

      -------------------错误写法-------------------
      rm -rf ${path}/*
      ----------------------------------------------

      -------------------正确写法-------------------
      if [ -d "${path}" ]
      then
      rm -rf ${path}/*
      fi
      ----------------------------------------------

      7.双中括号的使用[[ ]]
      shell的双中括号有很多的作用
      ----------------------------------------------
      正则匹配
      if [[ Yes =~ Y|y ]]
      then
      echo matched
      fi
      ----------------------------------------------

      ----------------------------------------------
      防止空变量,以下if判断,如果使用[]则会报错
      if [[ $aaa == 1 ]]
      then
      echo matched
      else
      echo "no such variable"
      fi
      ----------------------------------------------

      8.使用ctrl+n补齐变量名
      如果变量名的命名比较长,手输入容易出错,复制又太麻烦,则可以使用ctrl+n补齐变量名
      操作可以避免手工输入导致的变量名错误

      二.临时文件
      尽量避免使用临时文件
      如果需要使用临时文件,请在文件名中加入脚本pid,并在脚本退出前清除临时文件
      mktemp命令可以用来生成一个临时文件
      tmp_file_name=$(mktemp TMP.XXXXXX)
      该命令会生成一个文件名为TMP.XXXXXX(其中XXXXXX为6位随机码)的文件
      这样做可以避免脚本并行时,临时文件名的冲突

      三.代码风格
      1.第一行申明解析器
      #!/bin/bash

      2.第二行导入环境变量
      . ~/.bash_profile (这个在cron脚本中尤其重要)

      3.查找脚本自身路径
      很多脚本没有定义起始目录,这样将导致脚本只能在当前目录下执行

      4.条件语句和循环语句风格统一
      使用shell统一格式,而非;
      -------------------错误写法-------------------
      if [[ ]] ;then
      command1
      fi
      while [[ ]] ;do
      command2
      done
      ----------------------------------------------

      -------------------正确写法-------------------
      if [[ ]]
      then
      command1
      fi

      while [[ ]]
      do
      command2
      done
      ----------------------------------------------

      5.缩进,使用TAB或者空格,不要两者混用
      想检查一个技术人员是否经验丰富,那么看看他的电子档简历吧,是否TAB和空格混用了

      6.添加注释
      没有注释的脚本,注定难以维护,当然,我们也应该避免一些毫无意义的注释
      -------------------错误写法-------------------
      #将3赋值给变量load_limit
      load_limit=3
      ----------------------------------------------
      大哥,您这是在逗我玩儿吗?

      -------------------正确写法-------------------
      #定义系统负载阀值
      load_limit=3
      ----------------------------------------------

      四.接口化编程
      当多个脚本需要协调工作时,应该根据各自模块的功能,定义相应的接口
      例如,多个脚本需要读取同一个配置文件的配置,那么将这个需求形成一个独立的脚本,各个脚本都来调用这个接口脚本
      这样在修改配置文件格式的时候,只要修改这个接口就行了

      查看CentOS版本方法

      Linux

      原文:http://blog.chinaunix.net/uid-24566729-id-3967742.html

      lnmp多用户安全运行环境(chroot)

      Linux

    • 0
    • 0
    • 0
    • 77
    • 单栏布局 侧栏位置: