美文网首页
shell脚本学习笔记

shell脚本学习笔记

作者: 愤愤的有痣青年 | 来源:发表于2019-05-20 14:56 被阅读0次

    shell 脚本是一种可以在linux系统下运行的解释性脚本,应用广泛,功能强大,以下是本人在学习shell脚本过程中的学习笔记.

    shell 脚本一般第一行为#!/bin/bash#!/bin/sh,这是用来指定运行的解释器程序的路径

    第一个脚本

    #!/bin/bash
    echo "hello shell"
    
    • 脚本名称为test.sh,其运行方式有两种,一种是赋予可执行权限后使用./test.sh运行,另一种是手动指定运行的解释器来运行,例如/bin/bash test.sh

    脚本语法

    变量

    • 定义变量时,变量名不加美元符号,同时变量名和等号之间不能有空格
      例: name="panso"

    • 使用变量时,需要在变量前面加上符号,并且使用花括号{}来包裹住变量名 例: `echo{name}`

    • 只读变量,使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
      例:

    myUrl="http://www.google.com"
    readonly myUrl
    
    • 删除变量, 删除后的变量不可再读
      例: unset name

    Shell 字符串

    字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号.

    • 单引号, 单引号用于原样输出字符串内容,内部变量将不会生效, 内部也不可出现单引号,即使转义的也不行
      例: str='this is a string'

    • 双引号,内部可以有变量和转义符号
      例:str="my name is ${name}"

    • 拼接字符串

    your_name="runoob"
    # 使用双引号拼接
    greeting="hello, "$your_name" !"
    greeting_1="hello, ${your_name} !"
    echo $greeting  $greeting_1
    # 使用单引号拼接
    greeting_2='hello, '$your_name' !'
    greeting_3='hello, ${your_name} !'
    echo $greeting_2  $greeting_3
    

    输出:

    hello, runoob ! hello, runoob !
    hello, runoob ! hello, ${your_name} !
    

    获取字符串长度

    string="abcd"
    echo ${#string} #输出 4
    

    提取子字符串

    • 以下实例从字符串第 2 个字符开始截取 4 个字符:
    string="runoob is a great site"
    echo ${string:1:4} # 输出 unoo
    

    查找子字符串

    • 查找字符 i 或 o 的位置,用到了expr命令(哪个字母先出现就计算哪个)
    string="runoob is a great site"
    echo `expr index "$string" io`  # 输出 4
    

    shell 数组

    bash支持一维数组(不支持多维数组),并且没有限定数组的大小。数组元素下标从0开始

    • 数组定义, 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:数组名=(值1 值2 ... 值n)
      例:
    array_name=(value0 value1 value2 value3)
    或:
    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[*]}
    # 取得数组单个元素的长度
    lengthn=${#array_name[n]}
    

    Shell 接收传递的参数

    • 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
    # 脚本内部代码
    echo "name is $0"
    
    # 带参数运行脚本
    ./test.sh panso
    
    # 输出
    name is panso
    
    • 另外,还有几个特殊字符用来处理参数:
    参数处理 说明
    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数。如"*"用「"」括起来的情况、以"1 2 …n"的形式输出所有参数。
    $$ 脚本运行的当前进程ID号
    $! 后台运行的最后一个进程的ID号
    $@ *相同,但是使用时加引号,并在引号中返回每个参数。如"@"用「"」括起来的情况、以"1" "2" … "$n" 的形式输出所有参数。
    $- 显示Shell使用的当前选项,与set命令功能相同
    $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

    相关文章

      网友评论

          本文标题:shell脚本学习笔记

          本文链接:https://www.haomeiwen.com/subject/yhckzqtx.html