shell脚本语言(超全超详细)_看见代码就想敲的博客-程序员秘密_shell脚本

技术标签: Linux  shell  linux  编程语言  

1、shell的概述

在这里插入图片描述
shell 是一种脚本语言
脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)
shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)
shell命令解析器:
系统提供 shell命令解析器: sh ash bash
查看自己linux系统的默认解析:echo $SHELL
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行

2、脚本的调用形式

打开终端时系统自动调用:/etc/profile 或 ~/.bashrc

/etc/profile
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公共环境变量在这里设置
开机自启动的程序,一般也在这里设置
~/.bashrc
用户自己的家目录中的.bashrc
登录时会自动调用,打开任意终端时也会自动调用
这个文件一般设置与个人用户有关的环境变量,如交叉编译器的路径等等
用户手动调用:用户实现的脚本
在这里插入图片描述

3、shell语法初识

3.1、定义以开头:#!/bin/bash

#!用来声明脚本由什么shell解释,否则使用默认shell
在这里插入图片描述

3.2、单个"#"号代表注释当前行

第一步:编写脚本文件

在这里插入图片描述

第二步:加上可执行权限

chmod +x xxxx.sh
在这里插入图片描述

第三步:运行

在这里插入图片描述

三种执行方式 (./xxx.sh bash xxx.sh . xxx.sh)

三种执行方式的不同点(./xxx.sh bash xxx.sh . xxx.sh)

./xxx.sh :先按照 文件中#!指定的解析器解析

如果#!指定指定的解析器不存在 才会使用系统默认的解析器

bash xxx.sh:指明先用bash解析器解析

如果bash不存在 才会使用默认解析器

. xxx.sh 直接使用默认解析器解析(不会执行第一行的#!指定的解析器)但是第一行还是要写的

三种执行情况:
打开终端就会有以后个解释器,我们称为当前解释器
我们指定解析器的时候(使用 ./xxx.sh 或 bash xxx.sh)时会创建一个子shell解析 脚本
在这里插入图片描述

注意:windows下 写脚本 在linux下执行 注意

在这里插入图片描述
执行结果:
在这里插入图片描述
将windows文件 转换成 unix文件
方法一:dos2unix 如果没有该插件 需要安装
sudo apt-get install dos2unix
dos2unix shell脚本
转换成功就可以执行运行
方法二:
需要用vi打开脚本,在最后一行模式下执行
:set ff=unix
在这里插入图片描述

4、变量

定义变量
变量名=变量值
如:num=10
引用变量
$变量名
unset :清除变量值
在这里插入图片描述
运行结果:
在这里插入图片描述
从键盘获取值read

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

案例:

在一行上显示和添加提示 需要加上-p
在这里插入图片描述
运行结果:
在这里插入图片描述

案例:读取多个值

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

案例只读变量:

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

查看环境变量:env

在这里插入图片描述
在这里插入图片描述

导出环境变量 作用:(让其他shell脚本识别该变量,设为全局变量)

source 脚本文件
source命令用法:
source FileName
作用:在当前bash环境下读取并执行FileName中的命令。
注:该命令通常用命令“.”来替代。
如:source .bash_rc 与 . .bash_rc 是等效的。
注意:source命令与shell scripts的区别是,
source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。

06_sh.sh

#!/bin/bash
expor DATA=250

用source 是文件生效
在这里插入图片描述
使用 env可以查看到环境变量中已经有 DATA
在这里插入图片描述
可以在终端直接中读取:
在这里插入图片描述
在其他sh脚本读取:
在这里插入图片描述
运行结果:
在这里插入图片描述

注意事项:

1、变量名只能包含英文字母下划线,不能以数字开头
1_num=10 错误
num_1=20 正确
2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来
3、双引号 单引号的区别
双引号:可以解析变量的值
单引号:不能解析变量的值
在这里插入图片描述
运行结果:
在这里插入图片描述
如果想在PATH变量中 追加一个路径写法如下:(重要!!!!)

export PATH=$PATH:/需要添加的路径

5、预设变量

shell直接提供无需定义的变量

在这里插入图片描述

案例:

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

脚本标量的特殊用法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加-e转义 才起换行作用
在这里插入图片描述
()由子shell 完成
在这里插入图片描述
{}由当前的shell执行

在这里插入图片描述

6、变量的扩展

6.1、判断变量是否存在

在这里插入图片描述
在这里插入图片描述

6.2、字符串的操作

在这里插入图片描述

7、条件测试

test命令:用于测试字符串、文件状态和数字
test命令有两种格式:
test condition 或[ condition ]
使用方括号时,要注意在条件两边加上空格。

7.1、文件测试

在这里插入图片描述
在这里插入图片描述

7.2、字符串测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.3、数值测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.4、符合语句测试

在这里插入图片描述
在这里插入图片描述

8、控制语句

在这里插入图片描述

8.1、if控制语句

格式一:
if [条件1]; then
    执行第一段程序
else
    执行第二段程序
fi
格式二:
if [条件1]; then
    执行第一段程序
elif [条件2];then
执行第二段程序
else
    执行第三段程序
fi

案例:

在这里插入图片描述

案例:判断当前路径下有没有文件夹 有就进入创建文件 没有 就创建文件夹 再进入创建文件

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

案例:

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

8.2、case

在这里插入图片描述
在这里插入图片描述

8.3、for循环语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

案例:

在这里插入图片描述

案例:扫描当前文件

在这里插入图片描述

8.4、while

在这里插入图片描述
在这里插入图片描述

8.5、until

在这里插入图片描述
在这里插入图片描述

8.6、break continue

在这里插入图片描述

9、函数

在这里插入图片描述
所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用
在这里插入图片描述

案例:求最值

在这里插入图片描述

案例:函数分文件

在这里插入图片描述
fun.sh
在这里插入图片描述
24_sh.sh
在这里插入图片描述

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

智能推荐

Project的用户权限设置_pear project 里面的权限设置_想好点的博客-程序员秘密

 Project的用户权限设置 上周末,我为系统集成事业部的几位同事创建了Project 帐户。昨天,我就接到两位同事的电话和邮件,说他们没有办法正常登录,希望我能够协助他们配置客户端。今天,我上去察看了他们的相关设置,他们做得很好,都是按照我的说明书设置的。可是,为什么会登陆不上去呢?我试着用我的帐户和张三的帐户登陆。都成功了,这就说明,他们的设置和ie本身没有问题,所以,我断定

游戏服务器:到底使用UDP还是TCP_无敌懵哥的博客-程序员秘密

在编写网络游戏的时候,到底使用UDP还是TCP的问题迟早都要面对。一般来说你会听到人们这样说:“除非你正在写一个动作类游戏,否则你就用TCP吧” 或者是 “你能够在MMO游戏中用TCP,因为魔兽世界就用的TCP!”遗憾的是,这些观点都没有反映这个问题的复杂性。背景首先,说明一下,我之前主要是用TCP进行网络编程。我曾为一个流行的在线纸牌游戏编写服务器了好几年,在高峰

Mysql慢查询日志以及优化_jeffrey_ding的博客-程序员秘密

慢查询日志设置当语句执行时间较长时,通过日志的方式进行记录,这种方式就是慢查询的日志。1、临时开启慢查询日志(如果需要长时间开启,则需要更改mysql配置文件)set global slow_query_log = on;注:如果想关闭慢查询日志,只需要执行 set global slow_query_log = off; 即可2、临时设置慢查询时间临界点 查询时间高于...

Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析_jswd_50x的博客-程序员秘密

今天发一篇"水文",可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不...

Linux 中 x86 的内联汇编_super_bert的博客-程序员秘密

Linux 中 x86 的内联汇编如果您是 Linux 内核的开发人员,您会发现自己经常要对与体系结构高度相关的功能进行编码或优化代码路径。您很可能是通过将汇编语言指令插入到 C 语句的中间(又称为内联汇编的一种方法)来执行这些任务的。让我们看一下 Linux 中内联汇编的特定用法。(我们将讨论限制在 IA32 汇编。)GNU 汇编程序简述让我们首先看一下 Linux 中使用的基本

网站使用手机相机_小红屋全景相机使用教程_weixin_39892447的博客-程序员秘密

拆开包装、检查物品我们先拆包装,检查一下包装里的物品是否齐全:小红屋全景相机、保护套、数据线,使用说明、保修卡以及赠送的擦镜布。然后看一下相机,精简的造型设计,除了功能按键几乎没有其他东西,这也为用户提供了便捷,了解所有功能键之后,就可以进入准备工作啦~拍摄前期准备1、下载小红屋全景相机APP第一种方法是扫码下载,用手机扫描《使用说明》小册子中第二页左侧二维码,点击下载、安装,安装成功后打开APP...

随便推点

退出程序代码_退出代码: 80008096_翻山越岭到天亮的博客-程序员秘密

public class MainActivity extends AppCompatActivity { // 定义一个变量,来标识是否退出 private static boolean isExit = false; Handler mHandler = new Handler() { @Override public void ...

人工智能“上位”会让程序员消失吗?_人工智能学家的博客-程序员秘密

大脑以及二进制代码(图:Canva)来源:Forbes作者:Nisha Talagala编译整理:科技行者写代码已经成了许多工作的一项关键技能。一些国家和学校甚至认为,编程语言是一种可以接...

协议的初识_hpp3.0_ych9527的博客-程序员秘密

文章目录1.协议1.1结构化数据1.2序列化和反序列化2.网络版的计算器3.抓包工具4.初识http协议4.1初识URL1.协议1.1结构化数据程序员写的一个个解决实际问题,满足日常需求的网络程序都是在应用层协议是一种约定、socket api的都是按照比特位的方式来进行发送和接收的,如果要传输一些"结构化的数据",怎么办呢?结构化数据:比如发送QQ消息 、消息的组成有 -> 头像、称谓、信息、时间等等 ->这种数据就叫做结构化数据1.2序列化和反序列化序列化:发送信息的时候、需要

Jenkins构建历史中的Build Name设置_set jenkins user build variables_萧木易的博客-程序员秘密

在项目的构建历史中,只能看到项目的构建号和构建时间。 系统管理->插件管理->搜索框输入user build vars后点击安装user build vars 此插件用于设置用户构建变量:jenkins用户名和ID等。重启后生效 系统管理->插件管理->搜索框输入Build Name and Description Setter后点击安装Build Name and Description Setter 此插件用于修改构建的显示名称(修改之前为默认的#1,#2,#3…)安装后重启jenkins服务才能生效接

top-K问题和随机选择算法_topk随机选择算法_涛歌依旧的博客-程序员秘密

之前聊过top-K问题,有朋友反馈说,如果内存能容纳下这N个元素,那么使用堆处理top-K问题,并不是最佳算法。确实如此,在本文中,我们来循序渐进地看下top-K问题的处理思路:1.快速排序算法;2.直接选择算法;3.堆选择算法;4.随机选择算法。

多核之后,CPU 的发展方向是什么?中科院计算所包云岗详细解读_人工智能学家的博客-程序员秘密

来源:知乎作者:包云岗包云岗,中国科学院计算技术研究所研究员、博士生导师、中国科学院大学教授,中国开放指令生态(RISC-V)联盟秘书长,从事计算机体系结构和开源芯片方向前沿研究,主持研...

推荐文章

热门文章

相关标签