0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

bash shell脚本常用代码记录

冬至子 来源:CSDN 作者:谷公子 2023-06-01 17:49 次阅读

任何编程语言,常用的语法和代码结构其实不多的,如果为了快速的掌握入手一门编程语言,我认为只需要把该语言的常见语法和代码记下来,再结合实际需求去拼接成新的代码。这篇博客主要是记录bash shell的一些用法,便于日后复习。所以这篇博客不会一次性写完的,会不断更新新的例子进来。

shell不是具体哪一款程序,它是一类程序的统称,这些程序只要能够按照用户的要求去调用操作系统接口,就可以称之为shell程序。常用shell程序有:bash, csh, tcsh, zsh等。

当我们在linux内打开一个terminal,此时就开启了一个shell程序供我们与操作系统进行交互。可以设置具体是开启了哪一款shell程序。

1. 列出当前linux系统安装的所有shell

在terminal内执行:cat /etc/shells,结果如下:

image.png

linux系统中当前安装的所有shell的列表存储在系统的/etc文件夹的"shells"文件中。默认情况下它具有只读权限,并且每当我们在系统中安装新shell时都会自动修改它。

2. 查看当前使用的shell

在terminal内执行:echo $SHELL,结果如下图:

image.png

3. 查看bash的手册

在terminal内执行:man bash

4. 定义变量和使用变量

变量名不需要声明,直接这样写:variable_name=variable_value。使用变量需要用$放在variable_name前就行,比如:

var="define variable"
echo $var

5. 注释

单行注释使用#号

多行注释可以通过在<< COMMENT和COMMENT之间加上注释

# echo $var
 
< < comment
export var
test comment
echo "somethin"
comment

6. Bash脚本第一行

Bash脚本文件的第一行必须是:#!/bin/bash。#!称为shebang,该行的其余部分是解释器的路径,用于指定bash shell在操作系统中的位置。

She Bang(#!)是一个字符序列,由脚本开头的符号(#)和感叹号(!)组成。在类似Unix的操作系统下,当带有shebang的脚本作为程序运行时,程序加载器会将第一行的其余行解析为解释器指令。因此,SheBang表示执行脚本行的解释器,并且它被称为执行各种脚本(如Bash,Python等)的路径指令。

shebang的格式很重要,格式不正确会导致命令工作不正常。因此,在创建脚本时,要始终记住SheBang格式的这两点:

  • 它应该始终在脚本的第一行。
  • 在#!和解释器的路径之间,#之前不应有任何空格。

7. 字符串和引号

Bash使用空格来确定单独的项目,引号可用于处理带有空格字符的文本。引号分为单引号和双引号。使用简单的文本和字符串时,使用单引号和双引号没任何区别。但如果需要对shell变量扩展,则只能使用双引号。如果在单引号中使用变量,则不会将其视为变量。例子如下:

Bash script:
var="define variable"
echo "The value is $var"
echo 'The value is $var'
 
The result is:
The value is define variable
The value is $var

8. Bash变量

变量名可以包含字母、数字和下划线,并且其名称只能以字母和下划线开头。不能定义以任何数字开头的变量。Bash变量不必在变量声明时定义变量的数据类型。Bash变量是无类型的,只需通过分配其值来键入变量名称,它会自动判断数据类型。如果将数字值分配给变量,它将自动转为整数工作,如果将字符值分配给该变量,则它将转为字符串类型。

  • 在读取或打印变量时,需要在变量名前加上美元($)符号;
  • 给变量赋值时,省略美元符号($);且变量名称和值之间的等号(=)两侧不应有空格。
  • 变量名称区分大小写:x和X视为两个不同的变量;
  • 变量可以放在Bash脚本中的任何地方或命令行中,因为在运行时,Bash会将其替换为其分配的值;
  • 不需要使用任何单引号或双引号来定义具有单个字符串的变量。需要将多个单词或字符串作为单个项输入到变量中,需要使用引号。

例子如下:

The bash script:
var="define variable"
echo "The value is $var"
var=123456
echo "The value is $var"
var=variable
echo "The value is $var"
 
The result is:
The value is define variable
The value is 123456
The value is variable

9. 系统变量和用户自定义变量

Shell或UNIX系统中都有两种类型的变量:系统定义的变量和用户定义的变量。

系统定义的变量是由操作系统本身创建和维护的预定义变量,通常是以大写字母进行定义的。要了解系统中有哪些系统变量的列表,在命令行或脚本中输入命令:set,或env,或printenv。例子如下:

The bash script:
echo $BASH
echo $BASH_VERSION
echo $OSTYPE
 
The result is:
/bin/bash
4.2.46(2)-release
linux

用户定义的变量是由用户创建和维护,通常这些变量以小写形式定义,但不强制,也可以定义成大写的。第8点已经讲过如何定义变量了,这里不说了。

10. 命令行参数

使用命令行参数可以给Bash脚本传递参数使脚本更具灵活性。在脚本运行时,以空格见间隔,跟在脚本名称后面。在Bash中,以下特殊变量会记录传递的参数:

  • $0 - 指定要调用的脚本的名称;
  • $1-$9 - 存储前9个自变量的名称,或可用作自变量的位置;
  • $# - 指定传递给脚本的参数总数(计数);
  • $* - 通过将所有命令行参数连接在一起来存储它们;
  • $@ - 将参数列表存储为数组;
  • $? - 指定当前脚本的进程ID;
    • 指定最后一个命令或最近执行过程的退出状态;
  • $! - 显示最后一个后台作业的ID;

例子如下:

The script is:
echo 'echo $0 is' $0
echo 'echo $1 is' $1
echo 'echo $2 is' $2
echo 'echo $3 is' $3
echo 'echo $4 is' $4
echo 'echo $5 is' $5
echo 'echo $6 is' $6
echo 'echo $# is' $#
echo 'echo $* is' $*
echo 'echo $@ is' $@
echo 'echo $? is' $?
echo 'echo $$ is' $$
echo 'echo $! is' $!
 
Run script: > >./test_bash.sh this is the first script
 
The result is:
echo $0 is ./test_bash.sh
echo $1 is this
echo $2 is is
echo $3 is the
echo $4 is first
echo $5 is script
echo $6 is
echo $# is 5
echo $* is this is the first script
echo $@ is this is the first script
echo $? is 0
echo $$ is 621356
echo $! is

在$@数组里的参数可以传递给其它数组并引用。

args=("$@")  
echo ${args[0]} ${args[1]} ${args[2]} ${args[3]}
 
The result is:
this is the first

11. 命令替换

命令替换允许命令的输出替换命令本身。Bash通过在子shell环境中执行命令并用命令的标准输出替换命令,并删除任何尾随的换行符。常用的命令替换语法为:

语法1:将要替换的命令放在反引号里
variable_name=`command_name`  
variable_name=`command_name [option...] argument1 argument2...`  
语法2:将要替换的命令放在圆括号里,且以美元符号($)开头
variable_name=$(command_name)  
variable_name=$(command_name [option...] argument1 argument2...)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    567

    浏览量

    26923
  • Shell
    +关注

    关注

    1

    文章

    358

    浏览量

    22903
  • bash终端
    +关注

    关注

    0

    文章

    7

    浏览量

    1961
收藏 人收藏

    评论

    相关推荐

    shell脚本进阶】几个常用shell进阶脚本

    shell脚本进阶】几个常用shell进阶脚本
    的头像 发表于 09-19 08:59 1450次阅读
    【<b class='flag-5'>shell</b><b class='flag-5'>脚本</b>进阶】几个<b class='flag-5'>常用</b>的<b class='flag-5'>shell</b>进阶<b class='flag-5'>脚本</b>

    如何在bash shell脚本中使用变量

    如果你使用编程语言编写过程序,那么一定接触过变量。而在 bash 脚本的编写时,变量也是一个很重要的概念。今天我们分享一下如何在 bash 脚本中使用变量。
    发表于 12-02 16:32 1672次阅读
    如何在<b class='flag-5'>bash</b> <b class='flag-5'>shell</b><b class='flag-5'>脚本</b>中使用变量

    Linux shell脚本分享

    今天浩道跟大家分享几个Linux运维中常用到的shell脚本
    发表于 07-18 09:53 457次阅读
    Linux <b class='flag-5'>shell</b><b class='flag-5'>脚本</b>分享

    Linux中常用Shell脚本示例

    当谈论一线运维工作中的常用 Shell 脚本时,以下是一些实用的例子。
    发表于 09-08 09:42 465次阅读

    Shell脚本编程实验

    ,比较容易识别,led1.sh就知道是shell脚本程序)简单作如下说明:第一行代码:#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种
    发表于 10-22 18:25

    高级Bash 脚本编程指南

    高级Bash 脚本编程指南
    发表于 10-26 08:33 7次下载
    高级<b class='flag-5'>Bash</b> <b class='flag-5'>脚本</b>编程指南

    shell脚本常用的调试方法介绍

    shell 是用户和操作系统交互的一个程序,经常用于执行一些自动化或者重复繁琐的任务,现在所有的 Linux 系统基本都自带了该程序,我们只需要编写好shell脚本,直接执行就可以了,
    的头像 发表于 09-01 10:43 2990次阅读

    【RT-Thread学习笔记】bash和dash-shell

    ​ 最近在工作中遇到一个很奇葩的问题,就是一个嵌入式的SDK编译,它里面执行shell命令的时候,使用的dash shell来解析,而通常我们默认用的是bash shell来解析;我按
    的头像 发表于 07-30 13:49 977次阅读
    【RT-Thread学习笔记】<b class='flag-5'>bash</b>和dash-<b class='flag-5'>shell</b>

    Raspberry Pi Bash Shell 脚本简介

      抛开潜在的麻烦不谈,Bash 可以是一个非常强大的工具,让您可以自动执行各种任务。在即将发表的文章中,我将展示如何使用 Bash 脚本以及一些硬件技巧来自动化我的 Raspberry Pi 冷却风扇。
    的头像 发表于 08-15 15:08 906次阅读
    Raspberry Pi <b class='flag-5'>Bash</b> <b class='flag-5'>Shell</b> <b class='flag-5'>脚本</b>简介

    Bash脚本中特殊变量$0是什么?

    Bash 脚本中,`$0` 是一个特殊变量,它代表当前脚本的路径和名称。这个变量用于表示脚本自身,它是 Bash 环境中的一个重要组成部
    的头像 发表于 05-12 14:41 1520次阅读

    分享249个拿来即用的shell脚本

      由于脚本案例太多,在此仅展示部分,完整版领取方式请见文末       249个拿来即用的shell脚本!   这249个Shell脚本
    的头像 发表于 07-07 10:52 739次阅读
    分享249个拿来即用的<b class='flag-5'>shell</b><b class='flag-5'>脚本</b>

    BASH shell脚本篇—条件命令

    这篇文章介绍下BASH shell中的条件相关的命令,包括:if, case, while, until, for, break, continue。
    的头像 发表于 10-11 15:21 319次阅读
    <b class='flag-5'>BASH</b> <b class='flag-5'>shell</b><b class='flag-5'>脚本</b>篇—条件命令

    BASH shell脚本篇—函数

    函数是代码重用的最重要方式。Bash函数可以定义为一组命令,在bash脚本中多次调用。
    的头像 发表于 10-20 16:31 354次阅读

    BASH shell脚本篇—文件处理介绍

    Bash Shell脚本中,可以使用多种方法来对文件进行操作,包括读取文件或写入文件。
    的头像 发表于 10-23 16:51 299次阅读

    Shell脚本检查工具ShellCheck介绍

    ShellCheck是一个用于bash/sh shell脚本的静态分析工具,可以辅助检查脚本语法错误,给出建议增强脚本健壮性。
    的头像 发表于 12-27 13:43 570次阅读
    <b class='flag-5'>Shell</b><b class='flag-5'>脚本</b>检查工具ShellCheck介绍