shell脚本的使用入门(超全)_IT_cdc的博客-程序员秘密_shell脚本入门

技术标签: 开发环境搭建  shell  运维  linux  bash  开发语言  

目录

1、shell的概述

2、脚本的调用形式

3、shell语法初识

4、变量

5、预设变量

6、变量的扩展

7、条件测试

8、控制语句

9、函数


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、单个"#"号代表注释当前行第一步:编写脚本文件

第二步:加上可执行权限

1

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 直接使用默认解析器解析

三种执行情况:(重要)

注意: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 命令。

可以在终端中读取:

在其他sh脚本读取:

运行结果:

注意事项:

1、变量名只能包含英文字母下划线,不能以数字开头
1_num=10 错误
num_1=20 正确
2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来
3、双引号 单引号的区别
双引号:可以解析变量的值
单引号:不能解析变量的值

运行结果:

如果想在PATH变量中 追加一个路径写法如下:(重要!!!!)

1

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

5、预设变量

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

案例:

运行结果:

脚本标量的特殊用法

加-e转义 才起换行作用

()由子shell 完成

{}由当前的shell执行

6、变量的扩展

6.1、判断变量是否存在

6.2、字符串的操作

7、条件测试

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

7.1、文件测试

7.2、字符串测试

7.3、数值测试

7.4、符合语句测试

8、控制语句

8.1、if控制语句

1

2

3

4

5

6

7

8

9

10

11

12

13

14

格式一:

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

到此这篇关于shell脚本语言的使用(超全超详细)的文章就介绍到这了。如果喜欢麻烦点个关注!

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

智能推荐

Microsoft Visual C++ Package Server 已停止工作_kaci_csdn的博客-程序员秘密

转自:http://www.cnblogs.com/licb/p/PackageServer.html使用vs2010时,有时会提示“Microsoft Visual C++ Package Server 已停止工作”,是否需要关闭程序或者调试程序。CPkgSrv 是关于Visual Studio 2010 中IntelliSense。 可以从菜单栏中的Tools-》Options-》

乐趣下载_Windows乐趣与DartFFI_深渊号角的博客-程序员秘密

乐趣下载As a product manager for a developer framework and programming language, it’s not always easy to find time during the workday to write code. But I consider it a vital task in order to empathize wi...

基于openCV的视频人脸识别——<<演员的诞生>>视频人脸识别_识别视频头像_huhongtao1989的博客-程序员秘密

1.准备训练数据  网络上下载(训练数据量大时,通过爬虫获取)目标的图片:  运用以下代码将原图中的人脸头像识别、提取、调整大小(这里是150*200),并分别保存。  运行环境:win7 64+VS2013+openCV3.1。  (PS:抱怨下vs和opencv的版本密切相关,注意安装配置)      #include

linux下SVN忽略文件/文件夹的方法_weixin_34088583的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

jQuery页面加载初始化常用的四种方法_jquery初始化_越来越好ing的博客-程序员秘密

当页面打开时我们需要执行一些操作,下面为大家介绍三种不错的方法,大家可以参考下当页面打开时我们需要执行一些操作,这个时候如果我们选择使用jquery的话,需要重写他的3中方法,自我感觉没什么区别,看个人喜好了,第二种感觉比较简单明了: 第一种: 代码如下:&amp;lt;script type=&quot;text/javascript&quot; src=&quot;./js/jquery-1.7.min.js&quot;&amp;gt...

【AD】Altium Designer 打开 .ddb文件(附:各种问题的解决)_Yngz_Miao的博客-程序员秘密

Altium Designer 很多人都在使用,但可能找到某些比较老版本的文件都是用ddb格式(protel 99se生成的绘制的)。Altium Designer是可以提供直接打开ddb格式的。但是在打开ddb文件的过程中,可能会遇到不少问题,不过作为一个新版本的软件BUG肯定是会有的,AD 把很多以前版本一些功能改为插件方式来提供,比如dwg导入,其它EDA软件的文件导入都是以插件形式提供...

随便推点

在校外使用校园网服务_heben99的博客-程序员秘密

  起初只是为了能在校外下载论文,后来发觉更多的是为了快速下载FTP里面游戏。。 以南航的VPN服务为例来进行说明,首先进入 net.nuaa.edu.cn 看到红色矩形里的VPN服务,点击进入 进入详细设置方法 点击SSL VPN下面的设置方法 下载VPN软件,安装完成后,按照上面网页里的说明,在右键弹出菜单中点“Connect”,在弹出登录框

系统程序员成长计划-写得又快又好的秘诀_weixin_34082789的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

OpenStack源码分析之cinder-volume服务_ddl007的博客-程序员秘密

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处!cat /usr/lib/python2.6/site-packages/cinder-2013.1.g3-py2.6.egg/EGG-INFO/scripts/cinder-volume"""Starter script for Cinder Volume."""import eventlet

hive on spark 趟坑指南_weixin_33724046的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

Linux平台的ASLR机制_加号减减号的博客-程序员秘密

简介ASLR,全称为 Address Space Layout Randomization,地址空间布局随机化。ASLR 技术在 2005 年的 kernel 2.6.12 中被引入到 Linux 系统,它将进程的某些内存空间地址进行随机化来增大入侵者预测目的地址的难度,从而降低进程被成功入侵的风险。当前 Linux、Windows 等主流操作系统都已经采用该项技术。具体实现分级

Python的GUI界面_钢琴小王子的博客-程序员秘密

一、按钮(Button)和标签(Label)import tkinter as tkwindow = tk.Tk() # 一个窗口window.title('my window') # 标题window.geometry('200x100') # 长和宽var = tk.StringVar() # tk里面的字符串变量l = tk.Label(window, textvariable=var, # 在window上面的Label, text是文字, textvariable是文

推荐文章

热门文章

相关标签