zoukankan      html  css  js  c++  java
  • shell脚本学习心得

    近来主要捣鼓ubuntu,大多数项目中都用到了sh脚本作为启动脚本等,以前只是大概明白如何使用,今天需要自己修改并运行脚本就碰到了很多问题,所以决定静下心来学习一下shell脚本,学习了几个小时,现将一些要点总结如下,以供以后翻看或者供入门人员参考。

    • 第一行
    这里指的是脚本第一行,一般脚本第一行都是
    #!/usr/bin/env bash
    这句话的意思是告诉操作系统用哪个命令来解析脚本,一般不用改变
    • 脚本(函数)参数
    运行xx.sh 1 2 3后
    $*为"1 2 3"(一起被引号包住)
    $@为"1" "2" "3"(分别被包住)
    $#为3(参数数量)
    注:如果以上字符出现在函数里就是函数的输入
    • 控制语句
      • if

    “if” 表达式如果条件为真则执行then后面的部分:

    if ….; then

    ….

    elif ….; then

    ….

    Else

    ….

    fi

    大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…

    通常用” [ ] “来表示条件测试。注意这里的空格很重要。要确保方括号的空格。

    [ -f "somefile" ] :判断是否是一个文件

    [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限

    [ -n "$var" ] :判断$var变量是否有值

    [ "$a" = "$b" ] :判断$a和$b是否相等

    [ -d "$f" ]  判断f这个变量的值是否是个文件夹
    
    
    • for循环
    for TIF in $(ls $LAYERS)
    do
    INPUT=file:$($LAYERS/$TIF)
    echo $INPUT
    done
    ls $LAYERS表示列出文件夹下所有文件,所以这是个集合,for循环遍历集合里所有文件,TIF为循环变量
    • 操作符
      • &&
    &&意思是如果左边成立执行右边相当于
    如:dir=$(cd "$dir" && /bin/pwd);
    这句话的意思是如果cd dir变量的值没有错误即dir变量所代表的文件夹路径正确,则执行/bin/pwd,即输出全路径 
    [ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”  [  ]里面表示一种判断
     
    • 变量定义
    LAYERNAME="SRTM"
    无需申明但是=前后不能有空格,使用的时候$LAYERNAME 或者 ${LAYERNAME}
    • 函数
      •  定义函数
    realpath ()
    {
    f=$@;
    echo "$f"
    if [ -d "$f" ]; then
    base="";
    dir="$f";
    else
    base="/$(basename "$f")";
    dir=$(dirname "$f");
    fi;
    dir=$(cd "$dir" && /bin/pwd);
    echo "$dir$base"
    }
    函数中的echo表示返回值,如果有多个echo最终输出会拼接起来。函数中的$@等表示函数的参数
      • 使用函数
    只需使用 realpath $LAYERS即可,$LAYERS为变量,realpath后面可以跟任意数量的参数以空格隔开,这些参数可以被realpath中的$@全部接受。其实echo就是个函数
    以上就是我所学到的shell脚本编写语法,不足之处还请大家补充。

    作者:魏守峰
    公司:武汉一格空间科技有限公司
    产品:流程化表格数据处理平台
    出处:http://www.cnblogs.com/shoufengwei/
    本文版权归作者和博客园共有,欢迎转载、交流,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。如果觉得本文对您有益,欢迎点赞、欢迎探讨。
  • 相关阅读:
    ngx-push-stream模块源码学习(四)——订阅
    nginx-push-stream模块源码学习(三)——发布
    nginx-push-stream模块源码学习(二)——模块初始化
    ngx-push-stream模块源码学习(一)——序言
    微信通过网页版定时推送消息脚本
    移动硬盘 或硬盘显示需先格式化问题解决
    SQL优化方法:
    sqlserver 电脑重启以后服务突然无法启动 报错
    sql server xp_cmdshell 过程中报错原因
    .net Core 2.0应用程序发布到IIS上注意事项
  • 原文地址:https://www.cnblogs.com/shoufengwei/p/5406087.html
Copyright © 2011-2022 走看看