Shell学习笔记之基础部分

Shell基础:

查看操作系统支持的shell:

[root@rhel9 ansible]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

Shell的基本元素:

  1. 声明:声明用哪个命令解释器来解释并执行当前脚本文件中的语句,一般写的解释器为**#!/bin/bash**

  2. 命令:可执行语言,实现程序的功能

  3. 注释:说明某些代码的功能,通过添加注释提高代码的可读性

    1. 单行注释:

      #echo "hello world"
      
    2. 多行注释:

      :<<BLOCK
      ....
      BLOCK
      
  4. 赋予rx权限

Shell编程的规范:

  1. 脚本的文件名应见名知意

  2. 文件开头指定脚本解释器(#!/bin/bash)

  3. 开头加版本特权等信息

    #Date :创建日期
    #Author :作者
    #Mail:联系方式
    #Function :功能
    #version :版本
    
  4. 尽量不使用中文注释

  5. 多使用内部命令,常用命令如下:

    1. echo
    2. eval
    3. exec
    4. export
    5. read
    6. shift
    7. exit
  6. 代码缩进(使代码结构更加清晰)

内部命令:

echo:

echo是用于终端打印的基本命令,默认情况下,echo 在每次调用后会添加一个换行符

[root@kittod ~]# echo hehe
hehe
[root@kittod ~]# echo haha
haha
[root@kittod ~]# echo "Welcome to bash"
Welcome to bash
[root@kittod ~]# echo 'Welcome to bash'
Welcome to bash

上面的方法看起来效果一样,但是在某些场合会得到不一样的结果

[root@kittod ~]# echo "the current directory is `pwd`"
the current directory is /root
[root@kittod ~]# echo 'the current directory is `pwd`'
the current directory is `pwd`
[root@kittod ~]# echo "hehe;hehe"
hehe;hehe
[root@kittod ~]# echo hehe;hehe
hehe
-bash: hehe: command not found

image-20230319104632450

设置字体颜色:
echo -e "\e[1;31m this is test \e[0m"设置为红色        把颜色还原

重置0,黑色30,红色31,绿色32,黄色33,蓝色34,洋红35,青色36,白色37

image-20230319102704392

eval:

**功能:**当shell程序执行到eval语句时,shell读入参数args,组合为一个新的命令。

exec:

exec命令能够在不创建新的子进程的前提下,转去执行指定的命令,当指定的命令执行完毕后,该进程就终止了。

export:

设置或导出环境变量

[root@kittod ~]# mingzi=hehe
[root@kittod ~]# echo $mingzi
hehe
[root@kittod ~]# bash
[root@kittod ~]# echo $mingzi
[root@kittod ~]# exit
exit
[root@kittod ~]# export mingzi
[root@kittod ~]# bash
[root@kittod ~]# echo $mingzi
hehe

read:

类似于C语言Scanf

read 命令可从标准输入读取字符串等信息,传给shell程序内部定义的变量。
read 是一个重要的 bash 命令,用于从键盘或标准输入读取文本,我们可以使用 read 命
令以交互形式读取来自用户的输入,不过 read 能做的远不止这些。

通常我们按下回车键表示命令输入完成,但是很特殊情况下,我们需要基于字符数或者
特定字符来表示命令输入完成。

-p prompt:设置提示信息
-t timeout:设置输入等待时间,单位默认为秒

#未等待
read -t 5 -p "Please enter your name:" name
Please enter your name:wgq
[root@rhel9 01]# echo $name
wgq
#等待
Please enter your name:[root@rhel9 01]# echo $name[root@rhel9 01]#

-n 表示限定输入的字符数。

-s 输入不回显

[root@rhel9 01]# read -s var
[root@rhel9 01]# echo $var
wgq

-d 定界符输入,以什么符号结束输入

[root@rhel9 01]# read -d "." var
wgqzqj.[root@rhel9 01]#
[root@rhel9 01]# echo $var
wgqzqj
[root@rhel9 01]#

shift:

shift,在程序中每使用一次shift语句,都会使所有的位置参数依次向左移动一个位置,并使位置参数$#减1,直到减到0为止。

exit:

exit,退出shell程序。在exit之后可以有选择地指定一个数作为返回状态

执行shell脚本的方式:

交互式执行:

[root@localhost ~]# for filename in `ls /etc`
do
if echo "$filename" | grep "passwd"
then
echo "$filename"
fi
done

作为程序文件执行:

对于一组需要经常重复执行的Shell语句来说,将它们保存在一个文件中来执行。我们通常称这种包含多个Shell语句的文件为Shell脚本,或者Shell脚本文件。脚本文件是普通的文本文件,可使用任何的文本编辑器查看或修改Shell脚本。

[root@localhost ~]# mkdir /test
[root@localhost ~]# cd /test
[root@localhost test]# vim test1.sh
#!/bin/bash
for filename in `ls /etc`
do
if echo "$filename" | grep "passwd"
then
echo "$filename"
fi
done

执行脚本的方法:

bash ./filename.sh

(产生子进程,再运行,使用当前指定的bash shell去运行)

./filename.sh

(产生子进程,再运行,使用脚本里面指定的shell去运行。使用该种方式执行需要x权限)

source ./filename.sh

(source命令是一个shell内部命令,其功能是读取指定的shell程
序文件,并且依次执行其中的所有的语句,并没有创建新的子shell进程,所以脚本里面所有创
建的变量都会保存到当前的shell里面)

.filename.sh

(和source一样,也是使用当前进程执行)

注意

执行shell脚本时,如果使用1和2这种方式执行会在当前的进程下产生一个新的bash子进程,
所以子进程切换到了/tmp目录,当脚本结束,子进程也就结束了,所以当前进程的目录不会发生变化;3和4方式执行时,不会产生新的进程,所以脚本执行结束后当前的目录会变成 /tmp。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/41148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型与语义搜索;钉钉个人版启动内测,提供多项AI服务

&#x1f989; AI新闻 &#x1f680; 钉钉个人版启动内测&#xff0c;提供多项AI服务 摘要&#xff1a;钉钉个人版正式开始内测&#xff0c;面向小团队、个人用户、高校大学生等人群。该版本具有AI为核心的功能&#xff0c;包括文生文AI、文生图AI和角色化对话等。用户可通过…

【IEEE会议】第二届IEEE云计算、大数据应用与软件工程国际学术会议 (CBASE2023)

第二届IEEE云计算、大数据应用与软件工程国际学术会议 (CBASE2023&#xff09; 随着大数据时代的到来&#xff0c;对数据获取的随时性和对计算的需求也在逐渐增长。为推动大数据时代的云计算与软件工程的发展&#xff0c;促进该领域学术交流&#xff0c;在CBASE 2022成功举办的…

基于docker搭建pytest自动化测试环境(docker+pytest+jenkins+allure)

pytest搭建自动化测试环境&#xff08;dockerpytestjenkinsallure&#xff09; 这里我以ubuntu18为例 如果有docker环境&#xff0c;可以直接拉取我打包好的镜像docker pull ziyigun/jenkins:v1.0 1 搭建Docker 1.1 安装docker # 配置docker安装环境 sudo apt-get install ap…

润和软件HopeStage操作系统正式上架阿里云、华为云、腾讯云商店

近日&#xff0c;润和软件HopeStage操作系统正式上架阿里云、华为云、腾讯云商店。 随着科技的发展&#xff0c;云服务成为现代社会信息和资讯的交换、共享、存储、检索、应用等重要方式。阿里云、华为云、腾讯云作为我国云服务市场三巨头&#xff0c;其云商店产品全面覆盖云、…

Nvidia Jetson 编解码开发(1)介绍

前言 由于项目需要,需要开发Jetson平台的硬件编解码; 优化CPU带宽,后续主要以介绍硬件编解码为主 1.Jetson各平台编解码性能说明 如下是拿了Jetson nano/tx2/Xavier等几个平台做对比; 这里说明的编解码性能主要是对硬件来说的 2. 编解码实现说明 2.1 软件编解码 优点:…

Idea中隐藏指定文件或指定类型文件

Setting ->Editor ->Code Style->File Types → Ignored Files and Folders输入要隐藏的文件名&#xff0c;支持*号通配符回车确认添加

Windows权限维持—自启动映像劫持粘滞键辅助屏保后门WinLogon

Windows权限维持—自启动&映像劫持&粘滞键&辅助屏保后门&WinLogon 1. 前置2. 自启动2.1. 路径加载2.1.1. 放置文件2.1.2. 重启主机 2.2. 服务加载2.2.1. 创建服务2.2.2. 查看服务2.2.3. 重启主机 2.3. 注册表加载2.3.1. 添加启动项2.3.2. 查看注册表2.3.3. 重启…

YOLOv5基础知识入门(7)— NMS(非极大值抑制)原理解析

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。NMS是指非极大值抑制&#xff08;non maximum suppression&#xff09;&#xff0c;它是一种常用于物体检测任务的算法。在物体检测中&#xff0c;通常会有多个预测框&#xff08;bounding box&#xff09;被提议出来&…

机器学习深度学习——transformer(机器翻译的再实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——自注意力和位置编码&#xff08;数学推导代码实现&#xff09; &#x1f4da;订阅专栏&#xff1a;机器…

【论文阅读】 Model Sparsity Can Simplify Machine Unlearning

Model Sparsity Can Simplify Machine Unlearning 背景主要内容Contribution Ⅰ&#xff1a;对Machine Unlearning的一个全面的理解Contribution Ⅱ&#xff1a;说明model sparsity对Machine Unlearning的好处Pruning方法的选择sparse-aware的unlearning framework Experiments…

JetBrains IDE远程开发功能可供GitHub用户使用

JetBrains与GitHub去年已达成合作&#xff0c;提供GitHub Codespaces 与 JetBrains Gateway 之间的集成。 GitHub Codespaces允许用户创建安全、可配置、专属的云端开发环境&#xff0c;此集成意味着您可以通过JetBrains Gateway使用在 GitHub Codespaces 中运行喜欢的IDE进行…

VScode搭建Opencv(C++开发环境)

VScode配置Opencv 一、 软件版本二 、下载软件2.1 MinGw下载2.2 Cmake下载2.3 Opencv下载 三、编译3.1 cmake-gui3.2 make3.3 install 四、 VScode配置4.1 launch.json4.2 c_cpp_properties.json4.3 tasks.json 五、测试 一、 软件版本 cmake :cmake-3.27.2-windows-x86_64 Mi…

JAVA基础知识(一)——Java语言描述、变量和运算符

TOC(Java语言描述、变量和运算符) 一、JAVA语言描述 1.1 java语言描述 JDK、JRE、jVM三者之间的关系&#xff0c;以及JDK、JRE包含的主要结构有哪些&#xff1f; JDKJre java的开发工具&#xff08;javac.exe java.exe javadoc.exe&#xff09; jre jvmjava的核心类库 为什…

【JavaEE基础学习打卡03】Java EE 平台有哪些内容?

目录 前言一、Java EE平台说明二、Java EE平台容器及组件1.平台容器2.平台组件 三、JavaEE平台API服务1.API服务概览2.平台API 总结 前言 &#x1f4dc; 本系列教程适用于Java Web初学者、爱好者&#xff0c;小白白。我们的天赋并不高&#xff0c;可贵在努力&#xff0c;坚持不…

使用CLI添加磁盘到VM

登录 https://portal.azure.com/#home&#xff0c;点击右上角的控制台图标 &#xff0c;打开CLI 在控制台中输入如下指令&#xff0c;在NetworkWatcherRG创建一个名字为TEST的虚拟机&#xff0c;使用的镜像是Win2019datacenter&#xff0c;username是aaa,password是1234567890A…

mysql的快速复习 和一些思考记录

数据库设计 第一范式&#xff1a;有主键&#xff0c;具有原子性&#xff0c;字段不可分割 数据库表中不能出现重复记录&#xff0c;每个字段是原子性的不能再分 关于第一范式&#xff0c;每一行必须唯一&#xff0c;也就是每个表必须有主键。 每一列不可再分&#xff01;&#…

okhttp源码简单流程分析

拦截器详细解析可以看大佬简书 "https://www.jianshu.com/p/6fac73f7570f"和 “https://www.jianshu.com/p/3c740829475c” okhttp请求流程 1&#xff1a;OkHttpClient okHttpClient new OkHttpClient.Builder() 构建一个okhttpClient对象&#xff0c;传入你想传入的…

vector使用以及模拟实现

vector使用以及模拟实现 vector介绍vector常用接口1.构造2.迭代器3.容量4.增删查改5.练习 vector模拟实现1.迭代器失效2.反向迭代器3.完整代码 vector介绍 和我们原来讲的string不同&#xff0c;vector并不是类&#xff0c;是一个类模板&#xff0c;加<类型>实例化以后才…

主机防护的重要性和方式

01 主机防护的重要性 主机防护是网络安全的重要组成部分。在互联网时代&#xff0c;网络攻击成为了一种常见的威胁&#xff0c;而主机防护则是保护计算机系统免受网络攻击的重要手段。 主机防护可以防范各种网络攻击&#xff0c;如病毒、木马、黑客攻击等&#xff0c;从而保…

气象监测站:用科技感知气象变化

气象监测站是利用科学技术感知当地小气候变化情况的气象观测仪器&#xff0c;可用于农业、林业、养殖业、畜牧业、环境保护、工业等多个领域&#xff0c;提高对环境数据的利用率&#xff0c;促进产业效能不断提升。 气象监测站主要由气象传感器、数据传输系统、电源系统、支架…