(超详细)Linux Shell 编程-程序员宅基地

技术标签: Linux  运维  linux  ssh  bash  

Shell的定义

Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等。 用户每输入一条命令,Shell就执行一条。这种从键盘输入命令,就可以立即得到回应的对话方式,称为交互的方式。
当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序文件就被称为Shell脚本。 在Shell脚本里内置了很多命令、语句及循环控制,然后将这些命令一次性执行完毕,这种通过文件执行脚本的方式称为非交互的方式。 Shell脚本语言很适合用于处理纯文本型的数据,而Linux系统中几乎所有的配置文件、日志文件,以及绝大对数的启动文件都是纯文本类型的文件。

[root@localhost ~]# cat /etc/shells
/bin/sh (指向/bin/bash)
/bin/bash (默认shell类型)
/usr/bin/sh
/usr/bin/bash

请添加图片描述

shell脚本:

​ 关键字

​ Linux命令

​ shell自带命令

​ 函数

​ 控制语句

.sh 作为文件后缀,代表是shell脚本

/etc/profile ~/.bash_profile ~/.bashrc ~/etc/bashrc(以最后一个生效)

shell脚本类型:请添加图片描述

脚本书写规范

​ #!/bin/bash

添加注释信息

#日期,#作者,#作用,#版本,#联系方式…

#Date:2022-6-12

#Author:

#Desc:

#Vers:

#Email:

文件名后缀 .sh

shell脚本执行:请添加图片描述

shell脚本编写规范:
写shell脚本时,命令用反单引号括起来``
设置变量 name=upper(等号两边不能有空格)

成对的符号,建议一次性写完 () {} [] ’ ’ " " ``

对于流程控制语句,应一次性将格式写完,再添加内容。缩进最好空四个


if  []

   then(注意缩进)

fi

for 

do 

...

done

变量

变量赋值方法

​ 变量名="值 "(=左右两边没有空格)

​ echo $变量名(进行输出)

对于环境变量:变量名大写

​ set命令:查看环境变量
env命令:查看全局变量
declare:用来做定义
unset NAME:取消变量/删除变量
    eg :
      # unset A 撤销变量 A
      # readonly B=2 声明静态的变量 B=2 ,不能 unset
用户自定义只在set中有;env中没有
请添加图片描述
请添加图片描述
请添加图片描述

自定义环境变量

​ (仅在当前环境有效)

​ 1、export 变量名=值

​ 2、变量名=值;export 变量名

​ 3、declare -x 变量名=值

赋值用= ; 相等用==

用户级环境变量

~/.bashrc

全局环境变量

/etc/profile

/etc/bashrc

/etc/profile.d:存放脚本

取消环境变量:unset 变量名

局部变量

变量名=值
变量名=‘值’
变量名=“值”
变量名=command
变量名=$(command)
变量数组
特殊变量

赋值时引号的作用:

  • 双引号:允许通过$符号引用其他变量值
  • 单引号:禁止引用其他变量值,$视为普通字符
  • 反撇号:命令替换,提取命令执行后的输出结果 全局变量的定义方法 export 变量名

字符串变量:
请添加图片描述
数组:
请添加图片描述
获取数组元素:请添加图片描述

位置变量!!!

​ $0 获取当前shell脚本文件名

​ $n (n>0) 代表参数值

$@ 代表命令行中所有的参数
$# 代表命令行中所有参数的个数
$* 代表命令行中所有的参数

$? 获取上一条命令执行的状态返回值 0代表成功,非0代表失败
$$ 获

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_50685659/article/details/125738428

智能推荐

cascadia-code字体_找不到所选的字体cascadia code-程序员宅基地

文章浏览阅读291次。https://github.com/microsoft/cascadia-code/releases_找不到所选的字体cascadia code

dedecmsV5.7 后台上传m4a的音频之后不展示-程序员宅基地

文章浏览阅读107次。问题:dedecmsV5.7 在后台上传了m4a的音频文件(如何添加m4a的音频格式,更改系统-系统基本配置-附件设置)之后,列表里不展示,如图:解决方案:打开include/dialog/select_media.php,查找#\.(mp3|wma大约212行else if(preg_match("#\.(mp3|wma)#", $file)){..._dede后台 上传音频报500

JavaFX文档(3)开始JavaFX之旅——1 Hello World_netbean开发javafx-程序员宅基地

文章浏览阅读2.4k次。javafxchina JavaFX 教程 中文_netbean开发javafx

FLANN快速近似最邻近算法官方指导文档_flann快速最近邻搜索库的手册-程序员宅基地

文章浏览阅读5.2k次,点赞8次,收藏41次。FLANN快速近似最邻近算法官方指导文档IntroductionQuick Start 快速学习Downloading and compiling FLANN 下载和编译Upgrading from a previous version 版本升级Compiling FLANN with multithreading support 多线程支持Using FLANN 使用细则Using FLANN from C++flann::Indexflann::Index::buildIndexflann::Index_flann快速最近邻搜索库的手册

你再也不用使用 Redux、Mobx、Flux 等状态管理了-程序员宅基地

文章浏览阅读84次。Unstated Next readme 的中文翻译前言这个库的作者希望使用 React 内置 API ,直接实现状态管理的功能。看完这个库的说明后,没有想到代码可以这个玩。短短几行代码,仅仅使用 React Hooks ,就实现了状态管理的功能。看完之后,第一想法就是翻译成中文,分享给其他人。提交 Pull Request 后,库作者将我的翻译合并了。同时作者欢迎将 README 翻译..._react 不再使用 mbox redux

2021-01-20数据库学习_操作数据库失败:duplicate entry '7117081892365615-qqfs-159-程序员宅基地

文章浏览阅读4.7k次。连表操作:##将两张表拼合在一起##结果为笛卡尔积select * from dep,emp;#select * from emp,dep where emp.dep_id = dep.id;mysql也知道 你在后面查询数据时 肯定会用到拼表操作所以特地的开设了对应方法inner join 内连接 只拼接两张表中公有的数据(不能拼接无关系的)left join 左连接 把左边的表作为主表 (展示左表所有的数据没有的数据用null代替)right join _操作数据库失败:duplicate entry '7117081892365615-qqfs-15957703860-2021-01-15

随便推点

Metagenome Assembly - Part1:基于德布莱英图(De Bruijn graph)的宏基因组de novo拼接_graph neural network meets de bruijn genome assemb-程序员宅基地

文章浏览阅读2.6k次,点赞5次,收藏20次。基因组学中的一笔画问题——Reads怎么拼接成重叠群(Contigs)_graph neural network meets de bruijn genome assembly

相随与欢-课程设计-程序员宅基地

文章浏览阅读156次。相随与欢大一下-面向对象课程设计-彩色泡泡机题目详解与欢行一、题目与需求分析:基于Qt框架的GUI设计与实现需求:1、绘制泡泡(颜色、大小等配置信息随机产生)2、点击游戏区域即可产生泡泡。3、泡泡会向上漂浮离开(速度随机)。二、具体实现:A、泡泡绘制类Bubble的设计bubble.h#ifndef BUBBLE_H#define BUBBLE_H//本类为泡泡的实现类//采用面向对象思想设计泡泡类并通过具体算法设计将其实现//2021/6/17 行//For 欢//不

Tomcat配置详细命令_tomcat命令-程序员宅基地

文章浏览阅读3.5k次。安装Tomcat之前需要先安装MySQL[root@localhost ~]# cd /usr/local/src/[root@localhost src]# tar -zxvf mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz[root@localhost src]# [ -d /usr/local/mysql ] && /usr/local/mysql /usr/local/mysql_old[root@localhost src]# mv m_tomcat命令

android 图片缓存本地,android异步加载图片并缓存到本地的方法-程序员宅基地

文章浏览阅读430次。访问图片在项目中非常常见,如果我们每次请求图片时都访问无法获取,因为它将消耗大量的流量,并且图片占用大量的内存空间,如果有太多的图片没有释放,很容易导致内存溢出,那么android异步加载图片并缓存到本地的方法大家知道吗?一起跟着爱站技术频道小编来了解一下吧!首先看一下异步加载缓存本地代码:publicclassAsyncBitmapLoader{/***内存图片软引用缓冲*/privateHas..._安卓如何使用imagecache

七.Vue模板语法_vue 设置button enable-程序员宅基地

文章浏览阅读223次。Vue模板语法<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue...._vue 设置button enable

Windows 如何注册自己的伪协议_windows伪协议-程序员宅基地

文章浏览阅读1.9k次。介绍伪协议前先介绍一下协议是什么。这里说到的协议不是指网络上的TCP/IP协议,而是操作系统提供支持的一种协议,类似标准协议HTTP, FTP。自定义协议叫做伪协议。如何注册一个伪协议?操作系统的协议都写在注册表[HKEY_CLASSES_ROOT]的KEY值下,我们在注册表内添加一项对我们软件支持的协议标志即可!_windows伪协议

推荐文章

热门文章

相关标签