Shell 从入门到放弃
前言:好久好久没有更新,转眼又是新的一年了,要继续努力呀
第一章:认识了解 Shell
1、关于Shell
Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
2、Shell脚本
Shell脚本(Shell script),是一种为shell编写的脚本程序。业界所说的shell通常都是指shell脚本。要注意的是,shell和shell script是两个不同的概念。
3、Shell环境
Shell编程跟JavaScript、PHP编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux的Shell种类(这里的Shell可以理解成一种解释器)众多,常见的有:
- Bourne Shell(/user/bin/sh或/bin/sh)
- Bourne Again Shell (/bin/bash)
- C Shell (/user/bin/csh)
- K Shell (/user/bin/ksh)
- Shell for Root (/sbin/sh)
- …
在日常工作中被广泛使用的是Bash
,与此同时,Bash
也是大多数Linux系统默认的Shell。
#!
告诉系统其后路径所指定的程序即是解释次脚本文件的Shell程序。
第一个Shell脚本
#!/bin/bash
echo "I love you , ZLX"
#!
是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。echo
命令用于向窗口输出文本。
创建如下shell脚本
运行结果如下
第二章 Shell变量
2.1 定义变量
定义变量时,变量名不加美元符号($):如
your_name="wangy"
注意:变量名和等号之间不能有空格。同时,变量名的命名须遵循如下规则:
- 命名只能使用英文字母、数字和下划线。首个字符不能以数字开头;
- 中间不能有空格,可以使用下划线_;
- 不能使用标点符号;
- 不能使用bash里的关键字(可用help命令查看保留关键字);
我们看下面的例子
运行结果如下(因为变量名和等号之间有空格,所以会报错)
2.2 使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可。比如
#!/bin/sh
var=12
echo $var
echo ${var}
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,为了规范起见,我们建议使用花括号。
#!/bin/sh
var="happy"
echo $varbirthday
echo ${var}birthday
不加花括号的话,解释器会把varbirthday看成一个变量,因为这个变量没有值,所以什么也不会输出。
2.3 只读变量
使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bash
mylove="Tom loves Lucy!"
readonly mylove
mylove="Tom loves Simmy!"
2.4 删除变量
使用unset命令可以删除变量。变量被删除后不能再次使用,unset命令不能删除只读变量。
#!/bin/sh
myUrl="https://www.runoob.com"
readonly myUrl
unset myUrl
echo $myUrl
2.5 变量类型
运行Shell时,会同时存在三种变量:
-
局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量;
-
环境变量:所有的程序(包括shell启动的程序)都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量;
-
shell脚本,shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行;
第三章 Shell字符串
字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。
3.1 单引号
单引号字符串的限制:
-
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
-
单引号字符串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用;
#!/bin/sh
your_name='runoob'
str='Hello, I know you are \"$your_name\"! \n'
echo -e $str
3.2 双引号
双引号字符串的优点:
-
双引号里可以有变量;
-
双引号里可以出现转义字符;
3.3 获取字符串长度
string='abcd'
echo ${#string}
输出结果
4
3.4 提取子字符串
string='I love you , zlx.'
echo ${string:1:4}
lov
注意:第一个字符的索引值为0,并且能取到开始和结束位置的字符。
3.5 查找子字符串
查找字符e或o的位置(哪个字母先出现就计算哪个,index函数的索引是从1开始的)
string='I love you , zlx.'
echo `expr index "$string" eo `
4
注意:以上脚本中`是反引号,而不是单引号’。
第四章 Shell数组
bash支持一维数组(不支持多维数据),并且没有限定数组的大小。类似于C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
4.1 定义数组
在shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)
注意:可以使用不连续的下标,而且下标的范围没有限制。
4.2 读取数组
${数组名[下标]}
使用@符号可以获取数组中的所有元素,例如:
${array[@]}
4.3 获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:
# 取得数组元素的个数
length=${#array[@]}
# 或者
length=${#array[*]}
# 取得数组单个元素的长度
length_n=${#array_name[n]}
第五章 Shell注释
5.1 单行注释
以#
开头的行就是注释,会被解释器忽略
5.2 多行注释
多行注释可以使用以下格式:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF也可以使用其他符号:
:<<'
注释内容...
注释内容...
注释内容...
'
:<<!
注释内容...
注释内容...
注释内容...
!
上述笔记来源 菜鸟教程
可以通过shell在线工具联系shell语句