• shell注释、变量、字符串、数组


    1.shell脚本

    文件开头#!/bin/sh #!/bin/bash #! 是一个约定标记,告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell

    2.运行shell

    • cd 到相应目录,然后 ./test.sh
    • 注意:一定要写成 ./test.sh,而不是 test.sh,直接写 test.sh,linux 系统会去 PATH 里寻找叫 test.sh ,当前目录通常不在 PATH 里,所以写成 test.sh会找不到命令的,用 ./test.sh 告诉系统说,在当前目录找

    3.shell注释

    • 单行注释:以 # 开头
    • 多行注释:用:<<! 语句1 语句2 !(其中!可以替换为其他符号)

    4.shell变量

    1. 命名规则
      • 英文字母、数字、下划线,不能有特殊字符、标点、空格等
      • 且不能用数字开头;
      • 不能使用bash里的关键字(用help命令即可查看保留关键字)
    2. 变量类型
      • 全局变量(环境变量)
        • 作用范围:
        • 定义:
          • 方法一:export variable_name=value
          • 方法二:variable_name=value export variable_name
      • 局部变量
        • 作用范围:一般在脚本或命令中进行定义,只在当前的shell中有效,其他shell启动的程序该变量无效,不能访问
        • 定义:variable_name=name
    3. 使用变量
      • 使用一个定义过的变量,只要在变量名前面加美元符号即可,如$name,${your_name}-----建议变量外加上花括号,避免一些麻烦
      • 只有使用变量的时候需要加上$符号,赋值等不需要
    4. 只读变量
      • readonly 变量名即可,之后修改改变量运行时会保存
    5. 删除变量
      • unset 变量名

    5.shell字符串

    1. 可使用单引号也可使用双引号
      • 单引号
        • 单引号中所有的字符都会原样的输出,单引号字符串中的变量是无效的
        • 单引号中无能再出现单个引号了,对单引号转义也无效,必须成对出现
      • 双引号
        • 双引号里可以有变量
        • 双引号里可以出现转义字符
      • 举例子
    #!/bin/bash
    name="Lucy"
    greeting_1='hello,${name}!'         # hello,${name}!
    greeting_2='hello,'$name'!'          #hello,Lucy!
    greeting_3='hello,'${name}'!'        #hello,Lucy!
    greeting_4="hello,${name}!"        #hello,Lucy!
    greeting_5="hello,"$name"!"        #hello,Lucy!
    greeting_6="hello,"${name}"!"      #hello,Lucy!
    greeting_7="hello,"$name"!"       #hello,"Lucy"!
    echo $greeting_1 $greeting_2 $greeting_3 $greeting_4 $greeting_5 $greeting_6 $greeting_7
    
    1. 获取字符串长度
    string="John Wilson"  echo ${#string} #输出 11(空格也算)
    
    1. 提取字符串:第一个字符的索引值为 0
    string="John Wilson"  echo ${string:0:7} #输出John Wi
    
    1. 查找字符串
    string="John Wilson"        
    echo `expr index "$string" oJ`    #结果为1,意为查找字符 “o 或 J” 的位置
    

    6.shell数组

    1. 仅支持一维数组,不支持多维数组;下标从0开始,获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0
    2. 定义
      • 数组名=(值1 值2 … 值n)
      • 赋值
    array_name=(value0 value1 value2 value3)
    array_name[1]=1111
    array_name[n]=valuenuuuu
    array_name[q]=valuenmmm
    echo ${array_name[0]} ${array_name[1]} ${array_name[2]} ${array_name[3]} ${array_name[n]} ${array_name[q]}
    echo ${array_name[@]}
    echo ${#array_name[@]} ${#array_name[*]}
    
    结果如下:
    #输出:valuenmmm 1111 value2 value3 valuenmmm valuenmmm
    #输出:valuenmmm 1111 value2 value3
    #输出:4 4
    
    1. 读取数组
      • 获取单个元素:${数组名[下标]}
      • 获取数组所有元素:echo ${数组名[@]}
    2. 获取数组长度
      • 获取数组长度(元素个数)${#数组名[@]} ${#数组名[*]}
      • 获取数组单个元素长度${#array_name[n]}
  • 相关阅读:
    centos7 部署kubernetes 1.20.1
    Pulse Width Modulation (PWM) interface
    imx6的IOMUX配置方法
    Linux下巧用转义符来完成多阶攻击
    记录一次半失败的php代码审计
    通过钉钉网页上的js学习xss打cookie
    PostMessage xss学习和挖掘
    解决Android微信支付官方demo运行失败
    Android集成银联支付,提示java.lang.UnsatisfieldLinkError错误
    解决 Plugin with id 'com.github.dcendents.android-maven' not found.
  • 原文地址:https://www.cnblogs.com/oneLittleStar/p/13496345.html
Copyright © 2020-2023  润新知