百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Shell简介 shell介绍

liuian 2024-12-16 14:48 26 浏览

一、Shell脚本建立

1. 什么是shell

????Shell是一个命令解释器,它在操作系统的最外层负责直接与用户对话,把用户的输入解释给操作系统,并且处理操作系统的输出结果,输出到屏幕给用户。这种对话方式可以是交互方式或者非交互式(脚本)的。

2. 什么是Shell脚本

????当Linux命令或者语句不在命令行下执行,而是通过一个程序文件执行时,该程序就被称为shell脚本。用户在shell脚本中写入一系列的命令语句组合,并且将这些命令、变量和流程控制语句有机的组合在一起就形成了一个功能强大shell脚本。

3. Shell脚本的建立

????在Linux中Shell脚本通常是在编辑器(vi/vim)中编写的,脚本的第一行会指出由哪一个解释器来执行脚本中的内容,比如:

#! /bin/bash
#
# network       Bring up/down networking
#
...

????脚本中开头的"#!"被称为幻数,在执行bash脚本时,内核会根据“#!”后的解释器来确定使用何种解释器来解释脚本的内容。值得注意的是这一行必须顶行来写。另外有时在脚本中会看到顶行的解释器写的是/bin/sh,这与/bin/bash有什么区别呢?

[root@localhost init.d]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 Oct  1 14:27 /bin/sh -> bash

????可以看到/bin/sh是/bin/bash的软链接,没什么区别,不过一般系统自带的shell脚本使用/bin/bash,用户自定义的一般指定/bin/sh。假如脚本中不指定解释器的话(第一行省略)就会使用系统默认的解释器,也就是bash,不过最好还是自己写上,比较符合规范。 ????另外就是shell中使用"#"进行注释,"#"后面的内容不会被解释器执行,只是单纯的注释,方便开发人员与自己查看功能说明,注释内容可以单起一行,也可以写在脚本后面。

2. 规范

  • 开头指定脚本解释器
  • 脚本中尽量使用英文注释,避免乱码
  • 脚本以.sh作为扩展名
  • 对于()、[]等成对的一次写出来,并且[]中内容两侧有空格;
  • 流程控制与迭代语句一次将结构写完整,然后再写中间内容

二、Shell脚本执行

????当shell脚本以非交互式的方式运行时,它会先查找环境变量ENV,该变量指定了一个环境文件(比如.bashrc、.bash_profile、/etc/profile等),然后从该环境变量文件开始回字形,当读取了ENV文件后,shell才开始执行shell脚本中的内容。 shell脚本的执行通常有以下三种方式:

  • bash test.sh 或 sh test.sh
  • ./test.sh(当前路径执行脚本)
  • source test.sh 或. test.sh

????第一种方式是脚本文件本身没有可执行权限时常使用的方法,推荐使用bash执行;第二种方式需要将脚本文件的权限改为可执行(chmod u+x test.sh),然后通过脚本路径就可以执行脚本了;第三种方式是使用source或者"."点号加载sehll脚本文件,该方式可以将脚本中变量或者函数导出到当前环境中进行调用。

# 使用source或者"."可以将脚本中的变量获取,但是如果使用其它两种方式,
# 脚本一旦执行完毕后获取不到变量

[root@localhost project]# echo 'user=`whoami`' > test.sh
[root@localhost project]# . test.sh 
[root@localhost project]# echo $user
root

但是如果使用其它两种执行方式是没有这种效果的:

# 输出为空
[root@localhost project]# echo 'user=`whoami`' > test.sh
[root@localhost project]# /bin/sh test.sh 
[root@localhost project]# echo $user
...

相关推荐

GANs为何引爆机器学习?这篇基于TensorFlow的实例教程为你解惑!

「机器人圈导览」:生成对抗网络无疑是机器学习领域近三年来最火爆的研究领域,相关论文层出不求,各种领域的应用层出不穷。那么,GAN到底如何实践?本文编译自Medium,该文作者以一朵玫瑰花为例,详细阐...

高丽大学等机构联合发布StarGAN:可自定义表情和面部特征

原文来源:arXiv、GitHub作者:YunjeyChoi、MinjeChoi、MunyoungKim、Jung-WooHa、SungKim、JaegulChoo「雷克世界」编译:嗯~...

TensorFlow和PyTorch相继发布最新版,有何变化

原文来源:GitHub「机器人圈」编译:嗯~阿童木呀、多啦A亮Tensorflow主要特征和改进在Tensorflow库中添加封装评估量。所添加的评估量列表如下:1.深度神经网络分类器(DNNCl...

「2022 年」崔庆才 Python3 爬虫教程 - 深度学习识别滑动验证码缺口

上一节我们使用OpenCV识别了图形验证码躯壳欧。这时候就有朋友可能会说了,现在深度学习不是对图像识别很准吗?那深度学习可以用在识别滑动验证码缺口位置吗?当然也是可以的,本节我们就来了解下使用深度...

20K star!搞定 LLM 微调的开源利器

LLM(大语言模型)微调一直都是老大难问题,不仅因为微调需要大量的计算资源,而且微调的方法也很多,要去尝试每种方法的效果,需要安装大量的第三方库和依赖,甚至要接入一些框架,可能在还没开始微调就已经因为...

大模型DeepSeek本地部署后如何进行自定义调整?

1.理解模型架构a)查看深度求索官方文档或提供的源代码文件,了解模型的结构、输入输出格式以及支持的功能。模型是否为预训练权重?如果是,可以在预训练的基础上进行微调(Fine-tuning)。是否需要...

因配置不当,约5000个AI模型与数据集在公网暴露

除了可访问机器学习模型外,暴露的数据还可能包括训练数据集、超参数,甚至是用于构建模型的原始数据。前情回顾·人工智能安全动态向ChatGPT植入恶意“长期记忆”,持续窃取用户输入数据多模态大语言模型的致...

基于pytorch的深度学习人员重识别

基于pytorch的深度学习人员重识别Torchreid是一个库。基于pytorch的深度学习人员重识别。特点:支持多GPU训练支持图像的人员重识别与视频的人员重识别端到端的训练与评估简单的re...

DeepSeek本地部署:轻松训练你的AI模型

引言:为什么选择本地部署?在AI技术飞速发展的今天,越来越多的企业和个人希望将AI技术应用于实际场景中。然而,对于一些对数据隐私和计算资源有特殊需求的用户来说,云端部署可能并不是最佳选择。此时,本地部...

谷歌今天又开源了,这次是Sketch-RNN

前不久,谷歌公布了一项最新技术,可以教机器画画。今天,谷歌开源了代码。在我们研究其代码之前,首先先按要求设置Magenta环境。(https://github.com/tensorflow/magen...

Tensorflow 使用预训练模型训练的完整流程

前面已经介绍了深度学习框架Tensorflow的图像的标注和训练数据的准备工作,本文介绍一下使用预训练模型完成训练并导出训练的模型。1.选择预训练模型1.1下载预训练模型首先需要在Tensorf...

30天大模型调优学习计划(30分钟训练大模型)

30天大模型调优学习计划,结合Unsloth和Lora进行大模型微调,掌握大模型基础知识和调优方法,熟练应用。第1周:基础入门目标:了解大模型基础并熟悉Unsloth等工具的基本使用。Day1:大模...

python爬取喜马拉雅音频,json参数解析

一.抓包分析json,获取加密方式1.抓包获取音频界面f12打开抓包工具,播放一个(非vip)视频,点击“媒体”单击打开可以复制URL,发现就是我们要的音频。复制“CKwRIJEEXn-cABa0Tg...

五、JSONPath使用(Python)(json数据python)

1.安装方法pipinstalljsonpath2.jsonpath与Xpath下面表格是jsonpath语法与Xpath的完整概述和比较。Xpathjsonpath概述/$根节点.@当前节点...

Python网络爬虫的时候json=就是让你少写个json.dumps()

大家好,我是皮皮。一、前言前几天在Python白银交流群【空翼】问了一个Python网络爬虫的问题,提问截图如下:登录请求地址是这个:二、实现过程这里【甯同学】给了一个提示,如下所示:估计很多小伙伴和...