Shell 脚本学习笔记(一)——Shell 变量和数组

与其当一颗流星,燃尽璀璨却不留下一丝灰烬,不如默默一生,在身后留下一座拱门,一方苗圃,一堵缀满果实的墙。

在写 shell 脚本的过程中,某些语法总是遗忘,为了让自己经常性且有条理的复习,在此整理了相关 shell 笔记。



1. Shell 简介

Shell 采用 C 语言编写,是用户和 linux 内核沟通的桥梁;Shell 既是一种命令语言,也是一种程序设计语言(解释性语言)。简而言之,是用于接收应用程序/用户命令,然后调用操作系统内核。
而Shell 脚本就是将完成一个任务的所有的命令按照执行的先后顺序,自上而下写入到一个文本文件中,然后执行。

2. 一个简单 shell 脚本

脚本名为 hello.sh

#!/bin/bash
echo "Hello World!"
mkdir -p demo1/demo2/hello.md
cd demo1/demo2
echo "hello" >hello.md 
# 向文档中写入内容
  1. #! 表示告诉系统其后路径所指定的程序即是解释此脚本文件的shell程序。

  2. # 表示脚本中的单行注释
    多行注释:

    :<<EOF
    ...
    EOF
    
    或者
    
    :<<!
    ...
    !
    

运行脚本

  1. 首先给文件执行权限

    chmod 700 hello.sh
    或者
    chmod +x hello.sh
    
  2. 运行脚本

    ./demo
    运行脚本可以是绝对路径,也可以是相对路径,上述展示的是相对路径
    

3. Shell 变量

3.1 系统变量

  • $HOME :主目录路径
  • $PWD:当前路径
  • $SHELL:输出结果是 :/bin/zsh, 脚本环境
  • $USER:当前用户名

3.2 自定义变量

var="hello"

变量命名规范

  • 等号两边不能有空格
  • 变量名称可以由字母、数字、下划线组成,不能以数字开头,环境变量一般大写。
  • 变量默认类型是字符串类型,无法进行数值运算
    ➜  shelldemo C=1+2
    ➜  shelldemo echo $C
    1+2
    
  • 变量升级为全局变量
    export 变量名
    

注意:
将 demo目录下的文件循环输出

for file in `ls /demo`
或
for file in $(ls /demo)

3.3 变量的使用

# 定义变量
name="zeng"
echo $name
echo ${name}
推荐使用花括号,因为当有多个变量名进行拼接时,,可以帮助解释器识别变量的边界。

3.4 Shell 字符串

首先 Shell 变量默认类型是字符串类型,字符串可以使用单引号、双引号或者不加引号,但是当变量值有空格时,必须要加引号。

单引号

➜  ~ C=1+2
➜  ~ echo $C
1+2

➜  ~ a='$HOME'
➜  ~ echo $a
$HOME

注意

  • 单引号里不能包含单引号
  • 单引号里的内容会被原样输出,且单引号里的变量是无效的

双引号

➜  ~ b="$HOME"
➜  ~ echo $b
/Users/zengzhaoxia

➜  ~ c="hello\n world"
➜  ~ echo $c
hello
 world

注意

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

3. 字符串操作

3.1 获取字符串长度

➜  ~ a='abcd'
➜  ~ echo ${#a}
4

3.2 提取字符串

字符串的第一个索引值为0

➜  ~ b="Hollo World"
➜  ~ echo ${b:6:3}.  #从第7个字符开始截取3个字符
Wor
➜  ~ echo ${b:6}
World

4. Shell 数组

5.1 定义数组

Shell 只支持一维数组,数组大小无限定,下标索引从0开始,数组元素用“空格”分隔开。

array=(value0 value1 value2 value3)

定义数组方法1

array=(value0 value1 value2 value3)

定义数组方法2

array=(value0
 value1
 value2
 value3
 )

定义数组方法3

可以不使用连续的下标
array[0]=value0
array[2]=value2

5.2 读取数组

1. 获取数组中单个元素
${array[下标]}

2. 获取数组中所有元素
${array[@]}

3. 获取数组长度
len=${#array[@]}
或者
len=${#array[*]}

4. 获取数组中单个元素的长度
len1=${#array[下标]}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小曾同学.com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值