当前位置: 首页 > news >正文

【Shell】脚本

Shell脚本

  • 脚本格式
  • 第一个Shell脚本:hello.sh
  • 脚本常用执行方式
    • 1. bash或sh+脚本的相对路径或绝对路径
    • 2. 输入脚本的绝对路径或相对路径
    • 3. 在脚本的路径前加上.或者source

脚本格式

脚本以#!/bin/bash开头(指定解析器)

#! 是一个约定的标记,告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

第一个Shell脚本:hello.sh

需求:创建一个shell脚本,输出hello world!

root@ubuntu:/home/yys# mkdir scripts	#创建文件夹
root@ubuntu:/home/yys# cd scripts
root@ubuntu:/home/yys/scripts# touch hello.sh	#创建文件
root@ubuntu:/home/yys/scripts# vim hello.sh		#编辑文件

若出现如下报错:

The program 'vim' can be found in the following packages:* vim* vim-gnome* vim-tiny* vim-athena* vim-gtk* vim-nox
Try: sudo apt-get install <selected package>

解决方法

界面如下在这里插入图片描述
输入

#!/bin/bash
echo "hello world!"

第一个Shell脚本就写好了,输入命令:wq保存并退出
若输入时出现报错E348:No string under cursor
解决方法

脚本常用执行方式

1. bash或sh+脚本的相对路径或绝对路径

当前目录下输入命令bash [filename]
在这里插入图片描述
其他目录下,输入相对路径执行bash scripts/[filename]
在这里插入图片描述
或使用绝对路径
在这里插入图片描述

2. 输入脚本的绝对路径或相对路径

  1. 赋予脚本的+x权限
    chmod +x [filename]
    在这里插入图片描述

有可执行权限时文件名变为绿色

  1. 执行脚本
    相对路径
    其中 . 指当前工作目录
    在这里插入图片描述
    绝对路径
    在这里插入图片描述

注意:必须具有可执行权限,即+x,否则报错
在这里插入图片描述
查看文件权限的方法:输入命令ll [文件夹]
在这里插入图片描述
如果在当前工作目录下有.sh文件,直接输入命令[filename].sh,shell会当作一条命令处理,会报错未找到命令,不能执行。
第一种方式相当于使用bash命令,开启一个bash进程,文件名相当于参数,本质是bash解析器执行脚本,所以脚本本身不需要执行权限;第二种方式实在当前的bash环境执行脚本,所以必须要有可执行权限。

3. 在脚本的路径前加上.或者source

在这里插入图片描述
在这里插入图片描述
source. 是bash shell的内部命令
在这里插入图片描述
前两种方式是在当前shell打开一个子shell脚本来执行脚本内容,当脚本内容结束则关闭子shell,回到父shell中。

实例:
在这里插入图片描述
61563是2493的子进程
在这里插入图片描述
此时退出子进程

第三种方式可以使脚本内容在当前shell里执行,而无需打开子shell。这也是每次修改完/etc/profile后,需要source的原因。

两者的区别在于环境变量的继承关系,如在子shell中设置的当前变量,父shell是不可见的。

http://www.lryc.cn/news/41565.html

相关文章:

  • Mybatis的多表操作
  • 【JVM】字节码指令全解
  • 【精品】华为认证数通HCIA+HCIP题库分享(含答案解析)
  • Qt cmake 资源文件的加载
  • 【链表OJ题(九)】环形链表延伸问题以及相关OJ题
  • 【C++初阶】四、类和对象(下)
  • IDEA maven没有Import Maven projects automatically解决办法
  • Java实习生------MySQL10道面试题打卡
  • 帆软报表设计器 数据集之数据库查询
  • CSDN 第三十七期竞赛题解
  • Vue实战【常用的Vue小魔法】
  • 用C跑爬虫
  • 【C语言】你真的了解结构体吗
  • 血氧仪是如何得出血氧饱和度值的?
  • Java全栈知识(3)接口和抽象类
  • JavaScript == === Object.is()
  • GPT4论文翻译 by GPT4 and Human
  • inode和软硬链接
  • 简单分析Linux内核基础篇——initcall
  • 硬件速攻-AT24CXX存储器
  • C# tuple元组详解
  • 1、Linux初级——linux命令
  • ChatGPT助力校招----面试问题分享(四)
  • 【设计模式】创建型设计模式
  • Linux 信号(signal):信号的理解
  • Vulnhub项目:Web Machine(N7)
  • Qt基础之三十三:海量网络数据实时显示
  • linux console快捷键
  • 弗洛伊德龟兔赛跑算法(弗洛伊德判圈算法)
  • nodejs篇 express(1)