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

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

3天内不再提示

shell脚本基础知识汇总1

jf_78858299 来源:阿Q正砖 作者:阿Q正砖 2023-02-15 10:48 次阅读

1.shell脚本基础

1.1 shell环境

shell分类

Shell 编程JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Linux 的 Shell 种类众多,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
  • ……

Mac系统默认的是zsh环境,ubuntu下默认的shell环境是bash环境,可以通过执行命令查看:

# ubuntu终端
xq@ubuntu:~$ echo $SHELL
/bin/bash


# mac电脑终端
➜  ~ echo $SHELL
/bin/zsh

一般系统都会内置几种shell,可以通过命令chsh修改系统默认的shell环境,在下次打开终端生效,修改示例如下:

# 查看系统中已安装的shell类型
xq@ubuntu:~$ cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/bin/zsh
/usr/bin/zsh


# 切换默认的shell环境到zsh
xq@ubuntu:~$ chsh -s /bin/zsh


# 切换默认的shell环境到bash
xq@ubuntu:~$ chsh -s /bin/bash

shell配置文件

我们开发环境用的最多的就是bash和zsh了,下面就介绍这两个shell为例介绍对应的配置文件。

Bash的配置文件

  • /etc/profile:为系统的每个用户设置环境信息,当用户第一次登录时会执行该文件里的命令。默认会直接调用/etc/bashrc。该文件的改动需要重启才能生效。
  • /etc/bashrc:为每一个运行bash shell的用户执行此文件。当bash shell被打开时,会读取并执行该文件中的命令。所以修改该文件后,重新打开Shell即可生效。
  • ~/.bash_profile:和/etc/profile类似,但是只对当前用户生效。
  • ~/.bashrc:和/etc/bashrc类似,但是只对当前用户生效。
  • ~/.bash_logout:当每次退出bash shell时,执行该文件。
  • ~/.bash_history:保存了历史命令。在Shell为Bash时,每次敲击命令时,都会保存在这个文件里

加载顺序:/etc/profile、/etc/bashrc、 /.bash_profile、 /.bashrc

Zsh的配置文件

  • ~/.zshenv:存放的环境变量配置项在任何场景下都能被读取,这里通常把$PATH等变量写在这里,这样无论是在交互shell,或者运行程序都会读取此文件。个人理解对标Bash的profile。
  • ~/.zprofile:和.zlogin类似,但是是在.zshrc之前加载。
  • ~/.zshrc:在交互式shell中会读取并执行该文件,包含设置别名、函数、选项、键绑定等命令。对标bashrc。
  • ~/.zlogin:在login shell的时候读取。
  • ~/.zlogout:退出终端的时候读取,用于做一些清理工作。对标bash_logout。
  • ~/.zsh_history:保存了历史命令。在Shell为Zsh时,每次敲击命令时,都会保存在这个文件里。

加载顺序:zshenv、zprofile、zshrc、zlogin

1.2 shell脚本

由于bash脚本使用场景更广泛,如android源码build目录中各种shell脚本,下面就以bash脚本为例进行讲述。

shell没有官方的ide支持,可以通过vscode + shellman插件来实现高效编写。shellman插件有进行命令与模版提示的功能。

脚本文件一般以.sh结尾(扩展名并不影响脚本执行),文件第一行指定运行的shell解释器类型。

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

#!/bin/bash
echo "Hello World !"

还有一种指定shell解释器的写法是通过env来声明

#!/usr/bin/env bash
echo "Hello World !"

运行方式

  • 作为可执行程序

以脚本中声明的shell解释器运行,示例如下:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,会忽略脚本中指定的解释器信息

如:

# 以zsh解析运行
zsh test.sh
# 以bash解析运行
bash test.sh

调试

shell脚本不能像android studio里面可以打断点方式调试,但是可以通过特定方式把执行过程都打印出来来排查问题。

对整个脚本加调试可以通过在指定解释器的地方添加-x参数

#!/usr/bin/env bash -x
echo "Hello World !"

或者

bash -x test.sh

如果是针对特定的代码块加调试可以通过下面的方式实现:

set -x
调试内容
set +x

示例代码如下:

set -x
echo "hello"
echo "world"
set +x


# 输出结果,带+的为执行过程打印
+ echo hello
hello
+ echo world
world
+ set +x
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11191

    浏览量

    208623
  • PHP
    PHP
    +关注

    关注

    0

    文章

    452

    浏览量

    26623
  • 编辑器
    +关注

    关注

    1

    文章

    800

    浏览量

    31032
  • Shell脚本
    +关注

    关注

    0

    文章

    36

    浏览量

    7958
收藏 人收藏

    评论

    相关推荐

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

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

    Shell基础知识(上)

    shell脚本在日常的Linux系统管理工作中是必不可少的。如果不会写shell脚本,你就不算是一个合格的管理员。目前,很多单位在招聘Linux系统管理员时,
    发表于 11-14 09:24 503次阅读

    基础知识汇总!!!

    基础知识汇总
    发表于 11-07 18:14

    Shell脚本编程实验

    指示灯每隔一秒交替闪亮10次按照图中的脚本一字一句输入就行了,其中Shell基础知识一点都不清楚的话多百度下吧,上面有很多相关知识。这里我就脚本
    发表于 10-22 18:25

    shell脚本最简明的教程

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合
    的头像 发表于 10-16 11:27 4713次阅读
    <b class='flag-5'>shell</b><b class='flag-5'>脚本</b>最简明的教程

    分散控制系统DCS基础知识汇总文件下载

    分散控制系统DCS基础知识汇总文件下载
    发表于 04-14 17:10 32次下载
    分散控制系统DCS<b class='flag-5'>基础知识</b><b class='flag-5'>汇总</b>文件下载

    华为EMC基础知识汇总资源下载

    华为EMC基础知识汇总资源下载
    发表于 06-04 11:10 126次下载

    传感器基础知识及特性资源汇总下载

    传感器基础知识及特性资源汇总下载
    发表于 07-18 09:36 25次下载

    109个实用shell脚本分享

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合
    的头像 发表于 03-16 08:58 2559次阅读

    Linux开发_Makefile规则与Shell脚本语言

    介绍Linux下Makefile编程知识点,Shell脚本知识点。
    的头像 发表于 09-17 15:40 1213次阅读

    shell脚本基础知识汇总2

    Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Linux 的 Shell 种类众多,常见的有:
    的头像 发表于 02-15 10:48 628次阅读

    shell脚本基础知识汇总3

    Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Linux 的 Shell 种类众多,常见的有:
    的头像 发表于 02-15 10:49 738次阅读

    shell脚本基础知识汇总4

    Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Linux 的 Shell 种类众多,常见的有:
    的头像 发表于 02-15 10:49 626次阅读

    shell脚本基础知识

    shell脚本是一个文件,里面存放的是特定格式的指令,系统可以使用脚本解析器翻译或解析指令并执行(无需编译),shell脚本的本质是
    的头像 发表于 04-17 15:00 1033次阅读

    Linux Shell脚本经典案例分享

    ​ 作为一名 Linux 运维工程师,会写好的脚本不仅能提高工作效率,还能有更多的时间做自己的事。最近在网上冲浪的时候,发现大家对Shell脚本都有“心结”,要么觉得自己写出来不好看,要么根本无从下手。 下面分享249个真实
    发表于 06-16 14:03 617次阅读
    Linux <b class='flag-5'>Shell</b><b class='flag-5'>脚本</b>经典案例分享