前言

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁,是linux内置的一款软件。

通过编写Shell的脚本,可以更好的使用linux系统(比如、安装卸载软件、增删改查文件等等),毕竟大部分linux、系统都没有界面,不像windows那样鼠标点点就完成了大部分需求。

shell软件的种类有很多,而且很多都被linxu内置(zsh很多linux尚未支持,可能需要安装和配置),不过好在他们的各自的脚本写法大差不差,且脚本文件的后缀名都为sh

名称 俗称 介绍 切换方式
Bourne Shell sh 最古老的 默认即是
Bourne Again Shell bash 最主流的 #!/bin/bash
Z-shell zsh 后起之秀 #!/usr/bin/env zsh

如何让linux知道我的sh需要用哪种shell程序执行呢?

在sh文件的第一行加上注释即可,比如我要使用bash作为我的此脚本文件的默认执行程序 #!/bin/bash

本教程关注的是 Bash,它易用和免费且大部分Linux 默认的 Shell

如何执行脚本文件

运行 Shell 脚本有两种方法:

作为可执行程序 ./test.sh

作为解释器参数(这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用) /bin/sh test.sh

变量

任何编程语言(脚本语言也是编程语言 比如js),变量都是基础。

变量是用于存储数据值的名称。

name="张三"

如使用变量呢?

加一个$ 即可,比如我要输出:echo $name即可,这点和其他语言不一样,不能直接echo name

数据类型

谈到变量,就不得不提数据类型。

字符串

用单引号 ' 或双引号 " 来定义字符串类型,区别是单引号里的任何字符都会原样输出(比如 变量和转义字符)。

name="xiaoming"

所以涉及到字符串的拼接,还是需要使用双引号模式。

echo "hello,$name" # 将会输出:hello,xiaoming

为了区分(主要是变量后的)边界,你还可以使用${name},比如

echo "hello,${name}tongxue!" # 将会输出:hello,xiaomingtongxue

数字

在shell中所有变量默认都是字符串型,,如果想作为数字运算需要用((运算式))$[运算式]expr命令这种形式

a=1
b=2
echo $a+$b # 打印:1+2
echo $[$a+$b] # 打印:3

另外shell默认不支持浮点数运算,需要通过第三方库yum -y install bc进行浮点运算

数组

两种定义方式:用括号来表示数组,数组元素用"空格"符号分割开。或者用角标分别单独定义

arr=(value0 value1 value2)
arr[0]=value0
arr[1]=value1
arr[age]=20

使用 ${}符号可以获取数组中的所有元素,例如:

echo ${arr[age]} #打印:20

传递参数

shell允许在执行脚本时,向脚本内部传递参数,

比如我们有一个脚本test.sh如下 :

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";

我们来执行它 ./test.sh 哈哈 嘻嘻,将会得到如下输出

[root@VM-24-8-centos ]# ./test.sh 哈哈 嘻嘻
执行的文件名:./test.sh
第一个参数为:哈哈
第二个参数为:嘻嘻

运算符

单独总结了一篇,点击查看

特殊符号

${ }、$[ ]、$( )的区别

${ }

Shell中使用一个已经定义过的变量,只要在变量名前面加美元符号$即可。

变量名外面的{ }是可选的,只是为了帮助解释器识别变量的边界。

str="java"
echo "I am $str"
echo "I am $s{str}Script"

$[]

是运算操作符,用于对整数进行数学运算

echo $[3*5] # 输出:8

$()

Shell 支持将命令的执行结果赋值给变量,即“命令替换”,。

variable=$(command)
variable=`command` # 命令替换的另一种写法

[ ]、[[ ]]、(())的区别

[ ]是test命令的简写形式,而test命令主要用于检测某个条件是否成立。

[[ ]] 是 test 的升级版,对细节进行了优化,并且扩展了一些功能,完全可以取代[ ]。

(())是一个数学计算命令,用于对整数进行数学运算,比如((a=10+66))

test命令用于检查文件类型和比较值,并且根据表达式的值来确定状态并退出。

所以如果只执行test命令,是不会有任何输出的,

可以使用echo $?来查看上次执的状态码(0表示成功,其他值则表示不成功)。

它经常和判读语句f..then一起使用,如果在终端输出打印,则经常和管道命令&&和||一起使用,如:

test 1 -ge 2 && echo "yes" || echo "no"
no

参考: https://blog.csdn.net/oqqHuTu12345678/article/details/129257269

shell语言入门的更多相关文章

  1. linux的shell脚本入门

    Linux shell脚本入门教程 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活 的工具.Shell不仅仅是命令的收集,而且是一门非常 ...

  2. C语言入门(21)——使用DBG对C语言进行调试

    C语言入门(21)--使用DBG对C语言进行调试 程序中除了一目了然的Bug之外都需要一定的调试手段来分析到底错在哪.到目前为止我们的调试手段只有一种:根据程序执行时的出错现象假设错误原因,然后在代码 ...

  3. Shell基础入门

    目录 Shell基础入门 1.什么是Shell? 2.Shell脚本的结构 3.Shell的变量 3.1.自定义环境变量 3.2.普通变量 3.3.位置参数变量 3.4.状态变量 4.条件测试和比较 ...

  4. Erlang语言入门

    Erlang语言入门 下载Erlang,http://www.erlang.org/downloads 安装之后开始菜单中有Erlang图标,打开之后是Erlang Shell,可以定制喜欢的颜色和字 ...

  5. 【Introduction】R语言入门关键小结

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  6. 【shell】shell脚本入门

    1. 前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚 ...

  7. Linux Shell编程入门

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  8. 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)

    1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...

  9. Linux Shell脚本入门--cut命令

    Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...

  10. 我为什么反对推荐新人编程C/C++语言入门?

    虽然我接触编程以及计算机时间比较早,但是正式打算转入程序员这个行当差不多是大学第四年的事情 从03年接触计算机,07年开始接触计算机编程, 期间接触过的技术包括 缓冲区溢出(看高手写的shellcod ...

随机推荐

  1. 🎀git统计某段时间内代码的修改量/总代码量

    1.前往git本地项目路径下 2.右键打开Git Bash工具 3.输入命令: 3.1.某段时间代码修改量 git log --since=2021-01-01 --until=2021-05-18 ...

  2. eolinker响应预处理:传参解决方法(响应数据截取后设置为变量)

    特别注意:需要使用全局变量或者预处理前务必阅读本链接https://www.cnblogs.com/becks/p/13713278.html 一.案例1 1.场景描述: 后一个请求需要前一个请求提供 ...

  3. Sentinel——网关限流

    目录 网关限流 route维度 自定义异常 重定向 自定义结果 API维度 网关限流代码配置 网关限流 Sentinel 支持对 Spring Cloud Gateway.Zuul 等主流的 API ...

  4. vue3 基础-插件 plugin 案例演示

    前篇有介绍关于插件 plugin 的无敌强大和基本使用流程后, 当时从俺的经验上看是没咋去使用它的, 即英雄无用武之地. 本篇也是从网上找个案例来为 plugin 的强大来小试牛刀啦. 假设我们要做一 ...

  5. 接口测试策略(一、概念&流程&范围)

    接口测试概要 接口测试概念 什么是接口测试? 维基百科对接口测试的定义如下: API testing is a type of software testing that involves testi ...

  6. 高性能NoSQL

    极客时间:<从 0 开始学架构>:高性能NoSQL 1.引言 关系型数据库凭借着SQL功能和ACID的属性,活跃于各种各样的系统中,但它并不是完美的,其存在以下缺点: 关系数据库存储的是行 ...

  7. AD 横向移动-TGS-REP Kerberoasting 攻击

    本文通过 Google 翻译 AD Escalation – Kerberoasting Attacks 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充. 导航 0 前 ...

  8. React-Native开发鸿蒙NEXT-蓝牙与图片处理的更正补充

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  9. 7 MyBatis动态SQL之bind标签|转

    1 MyBatis动态SQL之if 语句 2 MyBatis动态sql之where标签|转 3 MyBatis动态SQL之set标签|转 4 MyBatis动态SQL之trim元素|转 5 MyBat ...

  10. Spring注解之@Autowired自动装配bean 综述

    @Autowired的工作原理是什么?在启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowire ...