zoukankan      html  css  js  c++  java
  • Shell编程笔记

    #!/bin/bash
    echo "Hello World !"

    1、作为可执行程序

    将上面的代码保存为 test.sh,并 cd 到相应目录:

    chmod u+x ./test.sh  #使脚本具有执行权限
    ./test.sh  #执行脚本

    2、作为解释器参数

    这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

    /bin/sh test.sh
    /bin/php test.php

    使用变量

    your_name="qinjx"
    echo $your_name
    echo ${your_name}
    echo "I am good at ${your_name}Script"
    readonly修饰为只读
    unset 命令可以删除变量
    unset variable_name

    shell不支持浮点数,小数运算示例如下

    1、借助bc处理示例:计算5.01-4*2.0,得到的结果为-2.99

    1
    2
    $ c=$(echo "5.01-4*2.0"|bc)
    echo $c

    2、借助awk处理示例:计算7.01*5-4.01,得到的结果为31.05

    1
    2
    $ c=$(awk 'BEGIN{print 7.01*5-4.01 }')
    $ echo $c

    注:在shell 中$() 与 ``等效。 中间包含命令语句执行,返回执行结果。

     

    单引号字符串的限制:

    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

    双引号的优点:

    • 双引号里可以有变量
    • 双引号里可以出现转义字符

    拼接字符串

    your_name="qinjx"
    greeting="hello, "$your_name" !"
    greeting_1="hello, ${your_name} !"
    echo $greeting $greeting_1

    获取字符串长度用#

    string="abcd"
    echo ${#string} #输出 4
    string="runoob is a great site"
    echo ${string:1:4} # 输出 unoo
    string="runoob is a great company"
    echo `expr index "$string" is`  # 查找is,输出 8。脚本中 "`" 是反引号,而不是单引号 "'"

    数组

    array_name=(value0 value1 value2 value3)
    array_name[0]=value0
    array_name[1]=value1
    array_name[n]=valuen

    读取数组的值

    valuen=${array_name[n]}

    使用@符号可以获取数组中的所有元素,例如:

    echo ${array_name[@]}
    # 取得数组元素的个数
    length=${#array_name[@]}
    # 或者
    length=${#array_name[*]}

    截取字符串

    1. # 号截取,删除左边字符,保留右边字符。
    echo ${var#*//}
    其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
    即删除 http://
    结果是 :www.aaa.com/123.htm
    2. ## 号截取,删除左边字符,保留右边字符。
    echo ${var##*/}
    ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
    即删除 http://www.aaa.com/
    结果是 123.htm
    3. %号截取,删除右边字符,保留左边字符
    echo ${var%/*}
    %/* 表示从右边开始,删除第一个 / 号及右边的字符
    结果是:http://www.aaa.com
    4. %% 号截取,删除右边字符,保留左边字符
    echo ${var%%/*}
    %%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
    结果是:http:
    5. 从左边第几个字符开始,及字符的个数
    echo ${var:0:5}
    其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
    结果是:http:

     printf 

    格式化输出

    printf "%-10s %-8s %-4s
    " 姓名 性别 体重kg  
    printf "%-10s %-8s %-4.2f
    " 郭靖  66.1234

    %s %c %d %f都是格式替代符

    %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),

    %-4.2f 指格式化为小数,其中.2指保留2位小数。

    # 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
    # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
    printf %s abc def
    
    printf "%s
    " abc def
    
    printf "%s %s %s
    " a b c d e f g h i j

    流程控制

    if condition1
    then
        command1
    elif condition2 
    then 
        command2
    else
        commandN
    fi

    文件包含

    #使用 . 号来引用test1.sh 文件
    . ./test1.sh
    
    # 或者使用以下包含文件代码
    # source ./test1.sh
     
    
    
    
  • 相关阅读:
    jquery判断<inpur type="checkbox" checked>是否被选择
    hibernate多对多的更新问题
    关于getHibernateTemplate().get()方法
    springmvc的@ResponseBody报错
    @RequestBody ajax 415 400
    js判断浏览器的类型,动态调整div布局
    平衡树treap 0基础详解
    P1582 倒水 题解
    vscode入门记
    P5025 [SNOI2017]炸弹 题解
  • 原文地址:https://www.cnblogs.com/lakeslove/p/7249543.html
Copyright © 2011-2022 走看看