• shell脚本


    最近学写脚本写一些遇到过的坑。

     2018-12-20:开始参考《linux命令行和shell脚本编程大全》

    命令执行:

     1 #1.直接执行,和在shell中直接输入一样。缺点是没法保存输出。
     2 echo $PATH
     3 cat somefile
     4 
     5 #2.用$和括号来执行。
     6 #    注意,如果没有括号的话,$仅仅表示取变量值。
     7 msg=$(cat somefile)
     8 
     9 #2.1考虑如何接受错误信息?
    10 #    使用>将标准错误输出重定向到标准输出
    11 msg=$(cat somefile 2>&1)
    12 
    13 #3.如何判断命令是否正确执行?
    14 #    目前自己知道的方法只有查询 $? 是否等于0,但不是很保险,而且有些命令即使报错了 $? 也仍然是0
    15 if [ $? == 0 ]; ...

    字符串比较

    # 其实在《鸟哥的linux私房菜》里已经说的很明确了,
    # 不过刚开始时没注意,当时感觉也是坑的一逼
    # 标准格式 [ "$cmp1" == "$cmp2" ],一定要用双引号括起来!
    
    #错误格式1,万一比较的是含空格的内容怎么办
    if [ $1 == "1" ]
    
    #错误格式2,经测试为空时这种比较方式返回false
    if [ $1 == "" ]

    井号的特殊用法(字符串去掉前缀)

    1 var=abcdefg
    2 mask=abcd
    3 echo ${var#${mask}}
    4 
    5 输出:
    6 efg

    条件判断

     1 #刚开始的时候遇到了几个坑
     2 #1.空格不是可选的,而是必须的!
     3 #正确示例:
     4 if [ $? == 0 ]
     5 
     6 #错误示例:(方括号和判断内容间必须有空格)
     7 if [$? == 0]
     8 
     9 #错误示例:(等于号两边必须有空格)
    10 if [ $?==0 ]
    11 
    12 #2.if条件必须加then,但是else却不需要加,而且if必须单独一行或行尾加分号
    13 if [ $? == 0 ]; then
    14 
    15 #3.中括号[]内比较的都是字符串,如果要比较整形可以使用双括号(())或双中括号[[]]代替。
    16 #    有一篇关于各类括号的博客https://blog.csdn.net/taiyang1987912/article/details/39551385
    17 if [ $1 -eq $2 ]...

    shift命令

    #位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,
    #原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1 

    函数,如何返回字符串

    #
    # 如果直接调用函数的话,接收到的结果是$? # 解决方法:使用echo输出,使用$()接收 # test.sh: #
    func() {
    if [ "$1" == "1" ] then echo one elif [ "$1" == "2" ] then echo two else echo else fi } res=$(func $@) echo "res=$res"
    # # 执行结果 # $
    sh test.sh 1 # one # $sh test.sh 2 # two
    #

    点+空格+文件名”是什么意思?

    1 #openwrt /etc/preinit脚本中:
    2 
    3 .  /bin/functions.sh
    4 
    5 
    6 #
    7 #表示在当前shell下执行文件,不论执行的文件是否有执行权限
    8 #2018-12-06:从后面这条中思考发现,实际上是把文件中的脚本内容拷贝到当前文件下,其中第一行#!/bin/sh...会被当作注释行忽略
    9 #2018-12-20:参考《linux命令行和shell脚本编程大全》附录:在当前shell中读取并执行指定文件中的命令

    第一行:#!/bin/sh /etc/rc.common 的意义实际上是执行 sh /etc/rc.common {当前脚本}!!!

     1 脚本test1.sh 2 #!/bin/sh
     3 
     4 echo "I'm test1.sh. $1=$1"
     5 
     6 
     7 脚本test2.sh 8 #!/bin/sh test1.sh
     9 
    10 echo "I'm test2.sh. $1=$1"
    11 
    12 执行./test1.sh 12313   I'm test1.sh. $1=123
    14 执行./test2.sh 12315   I'm test1.sh. $1=./test2.sh
  • 相关阅读:
    C# 工厂
    sql server 数据库 数据DateTime 转mysql
    java 快捷工具,如何清理不需要的引用
    动态调用webservice 接口
    动态调用wcf接口服务
    下载图片出现问题
    jQuery Validation Engine 表单验证
    mvc5 知识点01
    mvc5 @RenderSection("scripts", required: false) 什么意思
    mvc5 _ViewStart.cshtml 模板页如何定义
  • 原文地址:https://www.cnblogs.com/laymond/p/9758850.html
Copyright © 2020-2023  润新知