shell教程

Shell是一种在Unix和类Unix系统中用于命令行交互的语言,它提供了编写自动化脚本的能力,常用于文件操作、进程控制等任务。本文详细介绍了Shell脚本的运行方式、基本语法、变量、表达式、控制结构、函数以及文件重定向等内容,是初学者的入门教程。
摘要由CSDN通过智能技术生成

shell

简介

Shell是一种脚本语言,通常用于在Unix和类Unix操作系统上进行命令行交互。它是用户与操作系统内核之间的接口,允许用户通过命令行或脚本文件来控制计算机上的操作。Shell程序通常用于执行复杂的任务,例如文件操作、网络通信、进程控制等。
Shell语言具有很高的灵活性,可以根据需要编写自定义脚本来自动化任务。Shell脚本通常包含一系列命令和流程控制语句,可以执行文件操作、程序运行、环境变量设置等任务。在Unix和类Unix操作系统中,常见的Shell包括Bash、Csh、Ksh等,它们都具有各自的特点和用法。Linux中默认使用bash。

运行

  • 文件开头需写#! /bin/bash,指明默认的脚本解释器。
  • 运行方式:
    1. 用解释器执行(可以没有权限):
      bash test.sh,test.sh是Shell脚本文件的名称。
    2. 作为可执行文件执行(必须要有权限):
      chmod +x test.sh,使脚本具有可执行权限。然后./test.sh直接运行。
    3. 在终端中执行Shell命令,并执行脚本:
      echo "echo Hello, World!" | sh
      其中第一种方法较常用。

语法

注释

  1. 单行注释(# 注释)
    在Shell脚本中,一行代码以 # 开头时,该行代码就被认为是注释,Shell 解释器会将这一行代码忽略。例如:

    #! /bin/bash
    
    # This is a comment
    echo "Hello World!"
    
  2. 多行注释
    在Shell脚本中,我们也可以使用一对 : << EOFEOF 来实现多行注释,其中一对EOF可以换成其他字符串,如: << qingqiu qingqiu

    #! /bin/bash
    
    : << suibian
    第一行注释
    第二行注释
    第三行注释
    suibian
    
    echo "Hello, World!"
    

变量

变量的命名规则

在Shell中,变量名遵循以下命名规则:

  • 变量名必须以字母或下划线开头。
  • 变量名中只能包含字母、数字和下划线。
  • 变量名不能以数字开头。
  • 变量名区分大小写。
  • 变量名和变量值之间不能有空格。
  • 如果变量值包含空格,需要使用引号将变量值括起来,例如name="qing qiu"
处理变量

在Shell中,变量可以用来存储字符串或数字等信息。可以通过定义变量、给变量赋值、使用变量等操作来进行变量处理。

  1. 定义变量
    定义变量有三种方法

    • name=qingqiu
    • name=“qingqiu”
    • name=‘qingqiu’

    其中不加引号和加双引号效果相同,支持变量替换和转义字符的解析,例如:

    name="qingqiu"
    echo "My name is $name"  # 输出:My name is qingqiu
    

    而单引号不支持变量替换和转义字符的解析,在单引号中,所有的字符都会被当作普通字符处理,例如:

    name="qingqiu"
    echo 'My name is $name'  # 输出:My name is $name
    
  2. 给变量赋值

    可以使用=号来给变量赋值,等号两边不能有空格,否则会报错。

  3. 使用变量
    使用变量时需要在变量名前加上$,或者${}{}用于识别变量边界。例如:

    name=qingqiu
    echo $name  # 输出qingqiu
    echo ${name}  # 输出qingqiu
    echo $nameye  # 输出nameye
    echo ${name}ye  # 输出qingqiuye
    
  4. 只读变量
    readonly或者declare可以将变量变为只读,修改只读变量时会报错。

    name=qingqiu
    readonly name
    declare -r name  # 两种写法都可以
    name=a  # 会报错,因为此时name只读
    

    取消只读属性:

    unset -v name
    
  5. 删除变量

    unset可以删除变量。

    name=qingqiu
    unset name
    echo $name  # 输出空行
    

    要想删除只读变量,需要先取消只读属性,再用unset删除。

变量类型
局部变量与全局变量
  • 自定义变量(局部变量)
    子进程不能访问的变量。
  • 环境变量(全局变量)
    子进程可以访问的变量。

自定义变量与环境变量可以互相转换:
自定义变量→环境变量

name=qingqiu
export name  # 方法一
declare -x name  # 方法二

环境变量→自定义变量

export name=qingqiu  # 定义环境变量,只在当前bash有效
declare +x name  # 改为自定义变量
字符串

在shell中,字符串可以用单引号、双引号或不用引号来表示。单引号与双引号有区别,参考上述定义变量处。
字符串的操作

  • 获取字符串长度

    name="qingqiu"
    echo ${
         #name}  # 输出7
    
  • 提取子串

    name="qingqiu"
    echo ${name:0:4}  # 提取从0开始的4个字符,输出qing
    
数字

数字变量用来存储数字类型的数据。在shell中,数字变量可以是整数或浮点数。

数组

数组中可以存放多个不同类型的值,下标从0开始,初始化时不需要指明数组大小。

  1. 定义
  • 使用圆括号括起数组元素,并用空格隔开。例如:

    array=(666 qing "qiu" haha)
    
  • 使用花括号括起数组元素,并用逗号隔开。例如

    array={
         666, qing, "qiu", haha}
    
  • 直接定义数组中的某个元素的值:

    array[0]=666
    array[1]=qing
    array[2]="qiu"  # 只输出引号内字符串,但建议使用"",以避免字符串含空格时出错
    array
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值