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]}
原文地址:https://www.cnblogs.com/oneLittleStar/p/13496345.html