Shell:可以批量处理、自动化完成一系列维护任务,大大减轻管理员的负担!Shell是一个特殊的应用程序,介于操作系统内核与用户之间,充当了一个“命令解释器”的角色。负责接收用户输入的操作指令,并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
如何查看系统所支持的Shell(默认为Bash):
Shell脚本格式:由脚本声明、脚本注释、可执行语句构成:
Shell脚本执行方式:只要将平时使用的各种Linux命令按顺序保存到一个文本文件,然后添加可执行权限,这个文件就成为一个Shell脚本了!PS:chmod +x 目标文件
重定向操作与管道符号:
1.重定向操作:在Linux系统中,一切硬件资源均已文件方式在系统中逻辑显示,例如:硬盘和分区,光盘等设备。包括以下交互设备文件。
A:标准输入(STDIN):默认的设备是键盘,文件编号为0,命令将从标准输入文件中读取在执行过程中需要的输入数据。
B:标准输出(STDOUT):默认的设备是显示器,文件编号为1,命令将执行后的输出结果发送到标准输出文件。
C:标准错误(STDERR):默认的设备是显示器,文件编号为2,命令将执行期间的各种错误信息发送到指定错误文件。
1):重定向输出:指的是将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上。使用“>”、“>>”符号表示,前者为保存的意思,后者为追加。
例如,将当前主机的CPU类型信息(uname -p)保存到cpuinfo.txt文件中。
例如,当需要保存目标文件原有的内容是,应改为“>>”操作符号,以便追加内容而不是覆盖文件。
2):重定向输入:指的是将命令中接收输入的途径由默认的键盘改为指定的文件获取,重定向输入使用“<”操作符。
例如:通过重定向输入可以使一些交互式操作过程能够通过读取文件来完成。此操作可以大大减少程序被打断的过程,提高脚本执行的效率。(passwd命令的--stdin选项用于识别标准输入)
3):错误重定向:指的是将执行命令过程中出现的错误信息,保存到指定的文件中,而不显示在屏幕上。错误重定向使用“2>”操作符,其中“2”是指错误文件的编号。(而标准输入、输出省略了0和1)
例如:以下操作可以将使用Tar命令进行备份时出现的错误信息保存到error.log文件中。
PS:使用“2>”操作符号,会像使用“>”一样覆盖目标文件内容,若要追加内容则使用“2>>”,也可以使用“>”、“2>”将两类输出信息分别保存到不同文件,也可以使用“&>”保存到同一文件中!
2.管道符号:管道符号作为不同命令之间的协同工作提供了一种机制,位于管道符号“|”左边的命令输出结果,将作为右边命令的输入对象,同一行命令中可以使用多个管道。
例如:使用grep命令查询使用“/bin/bash”作为Shell的用户名称时,会输出符合条件的整行内容,在此基础上可以结合管道操作与Awk命令作进一步过滤,只输出用户名和登录Shell。
PS:上例中Awk作用是以冒号“:”作为分隔符,输出第一和第七区域的字符串。其中“-F”部分用来指定分隔符号(可以指定任意符号)
使用Shell变量:
1.自定义新的变量:格式“变量名称=变量值”
自定义变量由系统用户自己定义,只在用户自己的Shell环境中生效,又称本地变量(变量名以字母或下划线开头,区分大小写,建议全大写,不可以包含特殊符号,如:+ - * / ? % # 等)。
例如:
2.查看和引用变量的值
通过在变量名称前添加前导符号“¥”,可以引用一个变量的值。使用Echo命令查看,也可以同时查看多个变量值,中间可以没有空格。
PS:echo�Ce 选项:用于调用特殊字符,支持反斜线控制的字符转换!
例如:
当引用变量和输出自己添加的新内容时,应以“{}”符号把变量名括起来。
3.变量赋值的特殊操作
A:双引号(“”):主要起界定字符串的作用,特别是当要赋值的内容中包含空格时,必须以双引号括起来;一般情况省略。(PS:双引号主要用于调用其他变量值,或者用到“空格”时,加上双引号,其他情况可省略)
例如:将“Benet 5.0”赋值给变量BENET,应执行“BENET=“Benet 5.0”操作。
在双引号范围内,使用“$”符号可以引用其他变量的值(变量引用)
例如:
B:单引号(‘):当赋值的内容中需要包含特殊符号 $ " \ 等字符时,应使用单引号括起来,在其范围内的字符作为普通符号对待!
但赋值内容中包含单引号时,可以使用“\”符号进行转义,以免冲突。(PS:也可以省略单引号,对特殊字符用“\”符号进行转义)
例如:
C:反撇号(`):此键位于esc键下面。
反撇号主用于命令替换,允许将命令的执行结果,作为变量的值输出。
例如:若要在一行命令中查找useradd命令程序的位置并列出详细信息:
反撇号也可以使用“$()”符号代替,它俩等价
将上面的命令结果作为wgl的值
4.read命令:此命令用于交互式方法赋值,且可以同时赋多个值。
read 的 -p 命令 :-p用于交互式提示信息。
4.设置变量的作用范围:
默认情况下,自定义的变量只在当前用户的Shell环境生效,当进入其他Shell环境却不生效。
例如:
为了使用户定义的变量在所有Shell中生效,可以使用内部命令Export将指定的变量导入到“全局变量”,也可以同时指定多个变量名作为参数,也能使用此命令定义新变量。
5.数值变量的运算
Shell变量的数值运算多用于脚本程序的过程控制(如循环次数,使用量比较等)在Bash Shell 环境中,只能进行简单的整数运算,不支持小数运算。整数值运算主要通过内部命令expr进行!运算符与变量之间必须有至少一个空格。
+:加法运算
-:减法运算
\*:乘法运算,PS:不能仅适用“*”符号,否则将被当成文件通配符
/:除法运算(不计算小数点后的数字)
%:取模运算,又称取余运算,用来计算整除后的余数(不计算小数点前的数字)。
6.环境变量:主要用于设置用户的工作环境,例如用户宿主目录、命令查找路径、用户当前目录、登录终端等,这些变量由Linux系统管理,会随着用户状态的改变而改变。使用env可以看到当前工作环境下的环境变量。
7.位置变量:又称为位置参数,使用“$1 $2 $3 … $9”表示。例如:当执行命令行“ls -lh /boot/”时,其中第一个位置变量为“-lh”,以“$1”表示;第二个位置变量为“/boot/”,以“$2”表示。命令或脚本本事的名称使用“$0”表示。
8.预定义变量:预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,不能更改,也不可以预定义变量赋值。预定义变量使用“$”符号和另一个符号组合表示,常见如下:
$#:表示命令行中位置参数的个数。
$*:表示所有位置参数的内容,即参数名。
$?:表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。
$0:表示当前执行的脚本、进程、程序名称。
补充:shell 执行方式(source bash ./)的区别
用法:
source file.sh 或 . file.sh
source命令与"."命令相同
source file.sh 与 sh file.sh 及./file.sh执行脚本的区别在那里呢?
1.当shell脚本具有可执行权限时,用sh file.sh与./file.sh执行脚本是没有区别的。./file.sh是因为当前目录没有在PATH中,所有"."是用来表示当前目录的。
2.sh file.sh 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export来传递。
3.source file.sh:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面