Bash基本语法介绍(上)

Bash基本语法介绍

0X 00 前言

想必大家应该都了解,bash应该是进入Linux世界里最常用的shell,现在大多数Linux发行版都默认bash作为shell。
大家可以在终端输入:

echo $SHELL

来查看自己的shell。而且shell是可以改变,可以通过 chsh 指令改变

chsh -s /bin/zsh

意思是将shell改成zsh,当然前提是你拥有这个shell
不知道有哪些shell?简单,shell列表保存在 /etc/shells 中,直接cat一下就出来了

cat /etc/shells

好了,这些基本的都讲清楚了,开始讲语法吧!
不过之前还是要说明一下:
每种shell的语法可能会有所不同,但是基本一致。我们选用bash来讲,主要是它用的范围广,因此拎出来作为代表。
废话少说,直接开始!

0X 10 创建一个shell脚本文件

shell脚本的后缀名是 .sh,当然,我们只需要新建一个文档,直接改名字就好了。
先给一个最简单的示例

#! /bin/bash
echo "Hello World"

是不是很熟悉,哈哈哈哈,一门语言的标准开始

来解释一下 # 是bash语言的注释符号,相当于C或者C++中的 //
但是第一句的 #! 是连着一起的,被称作Shebang,操作系统看到Shebang的时候,会将后面内容作为解释器指令,并调用该指令。这句话其实是告诉我的脚本是用 bash 来执行的 ,或者你可以指定其他的shell 比如 sh、zsh ,甚至可以不要,那么系统就会用默认的shell执行

我们来看如何运行:
首先,由于我们是普通用户创建的,所以直接运行可能会有权限限制,我们需要改变运行权限:

chmod +x HelloWorld.sh

现在在本目录下就可以直接运行啦:

./HelloWorld.sh

在这里插入图片描述

0X 10 bash语言之变量

作为一门编程语言,变量是必不可少的,bash也有自己的变量定义方式。
但是相比C++,java这些语言,bash的变量没有类型,可以直接定义(看起来有点像python)

1、变量定义

message='Hello World'

想定义直接就可以定义,想用就可以直接用

echo $message

当我们需要注意的是,看起来很随便,但其实也并不是那么随便。比如,如果你在定义变量的时候,在中间打一个空格试试

message='Hello world'
message ='Hello world'
message = 'Hello world'

事实证明,以上三种都会报错:
在这里插入图片描述
为什么呢?其实是以为当你一隔开,bash就会把你当做是一个命令,所以就会报错,说没有这样的指令。
所以说,还是不能太随便啊

2、变量显示
其实我们前面已经用到了,也就是使用 $ 符号,就想之前一样

message='Hello World'
echo $message

这样就能将变量中的信息给提取出来了

但是我们会发现这样一个问题

message="Hello World"
echo 'The message is $message'

在这里插入图片描述
咦,没用了?确实,在这样的情况下不会将其进行解析。
但是你会发现,将echo后面用双引号括起来就可以了

这我们就要讲到bash的三种引号了

3、三种引号
在bash中,引号一共有三种:

类型 表示
单引号
双引号
反引号 `

区别:

  • 单引号:如果变量被包含在单引号里面,那么变量不会被解析,美元符号( $ )保持原样输出
  • 双引号:双引号忽略大多数特殊字符,但不包括:美元符号( $ )、反引号( ` )、反斜杠( \ ),这 3
    种特殊字符将不被忽略。不忽略美元符号意味着 Shell 在双引号内部可进行变量名替换。
  • 反引号:要求 Shell 执行被它括起来的内容

可能大家对反引号的使用有点不太清楚。来,我们来举一个例子:

#!/bin/bash
message=`pwd`
echo "You are in the directory $message"

因为message是用反括号括起来的,所以会执行其中的内容,那么结果怎样呢?
在这里插入图片描述
现在懂了吧,所以说,反括号有时候还是十分有用滴。

0X 20 bash语言之输入

1、使用read进行输入
刚才我们看到了 ehco 输出,那么自然要有输入——read

直接来例子:

#!/bin/bash

read name
echo "Hello $name !"

运行:
在这里插入图片描述
会发现终端先是让你进行输入,然后输入的内容被存入变量name中,然后再进行显示

简单吧!

我们甚至可以用 read 命令一次性给多个变量赋值
在这里插入图片描述
可以看到,空格将两个变量的内容分开了
但是有一点:
如果输入的参数比预期的要多,那么最后一个参数会将后面所有的内容都拿走
在这里插入图片描述

2、使用 -p 输出提示

但有时候我们可能需要加入一些提示,来提高我们脚本的交互性。这时候可以用 -p 参数来实现

#!/bin/bash

read -p 'Please enter your name : ' name
echo "Hello $name !"

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

3、使用 -s 隐藏输入
在某些情况下,我们需要隐藏我们的输入,比如输入密码的时候。这时候可以加上 -s 参数

#!/bin/bash

read -p 'Please enter your password :\n ' -s pass
echo -e "\nThe password is $pass !"

在这里插入图片描述
在上面,echo 加上 -e 是为了让解析符号(\n)起作用,用来换行

0X 30 bash语言之数学运算

我们先在这提醒一下各位:

在 Bash 中,所有的变量都是字符串!

看到着想必又有同学要问了:
既然是字符串,那么bash不能做数学运算了?

这倒是一个好问题,作为一门编程语言,怎么能少的了数学运算呢?

但Bash本身确实是不会操纵数字。我们需要用指令来进行一波操作

这个指令就是——let,用于赋值

例如:

let “a=5”
let “b=2”
let “c=a+b”

让我们来演示一波:

#! /bin/bash

let "a=5"
let "b=2"
let "c=a+b"

echo "c=$c"

结果如下:
在这里插入图片描述
成了,完成了数学运算了

可用的运算符如下表:

运算 符号
加法 +
减法 -
乘法 *
除法 /
幂(乘方) **
余(整数除法的余数) %

除了幂(乘方)有点特殊(使用两个星号 **),其它都和一般的编程语言类似。

上例子:

let “a = 5 * 3” # $a = 15
let “a = 4 ** 2” # $a = 16 (4 的平方)
let “a = 8 / 2” # $a = 4
let “a = 10 / 3” # $a = 3
let “a = 10 % 3” # $a = 1

还有一个规则和C风格很像:
let "a *= 3"
没错相当于 let "a = a * 3"

————————我—————是———————分—————————割————————线———————
好啦好啦,今天先讲到这了,后面的就放在下篇了
链接也放这里啦,希望大家多多支持~
Bash基本语法介绍(下)

———————参—————————考———————————博———————————客—————————
Linux命令行与Shell脚本编程大全/42 变量在手,Shell不愁

猜你喜欢

转载自blog.csdn.net/rjszz1314/article/details/104466193