zoukankan      html  css  js  c++  java
  • shellscript

    shell script 运行方法
    --------------------------------------
    1. 以命令方式执行( 一般是以这种方式执行 )

    首先修改档案权限可以运行
    chmod 755 abc
    chmod u+x abc
    ./abc  直接间接目录运行

    2. 以bash或 sh方式执行 
    sh abc 或 bash abc 使用sh 或bash 运行

    ( 以这种方式运行的bash, 不需要运行权限 )

    /etc/init.d/ 目录下全部是script, 可以学习参考

    良好的script习惯
    --------------------------------------
    良好的注释格式:

    image

    注释 功能, 版本信息, 作者,联系方式, 版权宣告, history, 使用绝对路径, 环境变量预先宣告与设定, 特殊情况加个人注释
    结构化程序设计, 软件工程学( 例如函数只完成一个功能 等等 )
    数值运算方式 var=$((运算内容))

    测试
    ---------------------------------------
    test -e , -d , -f , 权限 -r -w -x  等
    test file1 -nt file2 ( file1 是否比 file2 新 newer than )
    test file1 -ot file2 ( file1 是否比 file2 老 older than )
    test file1 -ef file2 ( 判断两个档案是否为一个, 可用在 hard link )
    -eq -ne -gt -lt -ge –le

    ==  !=  >    <  >=  <=
    test -z string 判断是否为空串
    test -n string 是否非空
    test str1 = str2 , !=
    多重条件判断 test -r filename -a -x filename  ( -a 表示and )
    test -o 表示 or ! 非
    [] 判断, 必须要有空格, 可以使用 == 号 ( 与 test 等价 )

    [ –z “$HOME” ]; echo $?  其中 [] 就等价于 test –z “$HOME”; echo $?


    参数
    ---------------------------------------
    /path/to/scriptname opt1 opt2 opt3 opt4
      $0                $1    $2    $3    $4
    $# 参数个数 上例为 4
    $@ 代表 "$1""$2""$3""$4"
    $*  跟 $@差不多, 只不过每个变量中间有个空格  

    shift 参数向左移动, 例如原来有 one two three four 四个参数, 执行 echo “$#” echo “$@”

    第1次: 4, one two three four

    执行 shift

    第2次: 3, two three four

    执行 shift

    第3次: 2, three four

    依此类推左移

    程序常用
    -----------------------------------
    if [ ]; then    注意 [] 中的内容要有空格
    elif []; then
    else
    fi

    case $变量名 in
    "1")
        ;;
    "2")
        ;;
    "*")
        ;;
    esac

    function fname()
    {
      echo "hello"
    }
    while []   条件成立, 就执行循环内
    do
    done

    until []    条件整理, 就停止, 正好与 while相反
    do
    done

    for var in count1 count2 count3 ...  第一次循环为count1, 第二次为count2, ...
    do
    done

    for ((初始值; 限制值; 执行步长))
    do
    done

    debug
    ------------------------------------------
    sh [-nvx] script.sh
    -n 不执行script, 仅检查语法问题
    -v 再执行 script前, 先将script内容输出到屏幕
    -x 将使用到的script内容显示到屏幕上, 最有用

    也可以使用 echo 来显示要查看的内容, 可以通过类似条件编译的办法来显示, 从C语言借鉴.

    特殊字符
    -----------------------------------------
    () 命令行, 命令行会进入子shell, 例如在外定义了a=1, 但是命令行里的a是没有定义的
    {} 代码块, 也叫匿名函数, 它里边的内容可以被外边可见
    local a, 定义局部变量只能在 function内
    : 空语句, while : 进入死循环
    : >data.txt 等价于 cat dev/null>data.txt
    (()) 数学计算扩展, 也可以处理c的风格, 例如for循环, a++ 即 ++操作符
    >| 强制重定向
    - 可以用于重定向 stdin 或 stdout
    shift 用来移位, 例如移位 $0,$1,$2...
    if 后边也可以接命令, 每个命令都是有回传值的, 例如
    if cd "$dir" 2>/dev/null; then
    let 用来声明常量 let "dec=32"
    let #bin = 2#101111101' 2进制常量

  • 相关阅读:
    如何成为技术牛人
    重新思考关系型数据库的设计
    架构与管理相通
    传统企业和互联网企业的不同软件价值观
    数据仓库生命周期模型
    用面向对象的思维方式来设计数据库
    数据仓库的几类事实表
    转腾讯产品总监的一篇博文
    开源大数据处理平台简史
    [kuangbin带你飞]专题六 最小生成树 J
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3160519.html
Copyright © 2011-2022 走看看