shell脚本简介

10 篇文章 0 订阅
9 篇文章 0 订阅

shell脚本简介

常见的shell

常见的shell有sh、bash、csh、tcsh、ash

sh

sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。

sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。

csh

sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。

Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了 vi 编辑器,还是 Sun 公司的创始人之一。

BSD 是 UNIX 的一个重要分支,后人在此基础上发展出了很多现代的操作系统,最著名的有 FreeBSD、OpenBSD 和 NetBSD,就连 Mac OS X 在很大程度上也基于BSD。

tcsh

tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

ash

一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

bash

bash shell 是 Linux 的默认 shell,本教程也基于 bash 编写。

bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。

基本操作
#查看shell
$ cat /etc/shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
#查看默认的shell环境
echo $SHELL
/bin/bash

第一个shell脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

输入一些代码,第一行一般是这样:

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

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

运行 Shell 脚本有四种方法

  • 作为可执行程序

    将上面的代码保存为 test.sh,并 cd 到相应目录:

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

​ 注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

  • 绝对路径执行脚本

    /demo/shell/test.sh
    
  • 作为解释器参数

    这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

    /bin/sh test.sh
    /bin/php test.php
    bash test.sh
    sh test.sh
    
  • 在当前的shell环境中执行脚本

    前缀使用.或者source后面跟上脚本名称即可在当前shell环境执行

    . test.sh
    source test.sh
    

Shell配置文件加载

四种运行环境下的加载方式
  • 交互式登录Shell、非交互式但有–login

    将先读取/etc/profile,再依次搜索/.bash_profile、/.bash_login和/.profile,并仅加载第一个搜索到且可读的文件。当退出时,将执行/.bash_logout中的命令

  • 交互式非登录Shell

    读取/.bashrc,不会读取/etc/profile和/.bash_profile、/.bash_login和/.profile

  • 非交互式非登录式Shell

    不会加载前面所说的任何bash环境配置文件,但会搜索变量BASH_ENV,如果搜索到了,则加载其所指定的文件

  • 远程Shell方式启动

    属于非交互非登录式,但会加载~/.bashrc,所以还会加载/etc/bashrc,由于是非登录式,所以最终还会加载/etc/profile.d/*.sh,只不过因为是非交互式而使得执行的结果全部重定向到了/dev/null中

判断是否交互式、是否登录式
#判断变量PS1,非空则为交互式
echo $PS1
#on表示登录式,否则为非登录式
shopt login_shell
#或者
#判断变量"-",若值中包含有字母"i",则表示交互式
echo $-
shopt login_shell

运行结果
在这里插入图片描述

几种常见的Bash启动方式
  • 正常登陆(伪终端登陆如ssh、虚拟终端)时,为交互式登陆shell

    以下是通过xshell进行的登录

    在这里插入图片描述

  • su命令,不带"–login"时为交互式、非登录式shell,带有login时为交互式登陆式shell

    在这里插入图片描述

  • 执行不带"–login"选项的bash命令时为交互式、非登录式shell,指定"–login"时,为交互式、登录式shell

    在这里插入图片描述

  • 使用命令组合(使用括号包围命令列表)以及命令替换进入子shell时,继承父shell的交互和登录属性

    在这里插入图片描述

  • ssh执行远程命令,但不登录时,为非交互、非登录式shell
    在这里插入图片描述

  • 执行shell脚本时,为非交互、非登录式shell。但指定了"–login"时,将为非交互、登录式shell

    执行上边代码

    在这里插入图片描述

  • 在图形界面下打开终端时,为交互式、非登录式shell

在这里插入图片描述

参考文章

Bash启动时加载配置文件过程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值