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不愁