IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Shell编程规范与变量 -> 正文阅读

[系统运维]Shell编程规范与变量

目录

引言

一、Shell脚本概述

1、Shell脚本的概念

2、Shell脚本应用场景

3、Shell的作用

4、Shell编程规范

(1)编写脚本代码

(2)赋予可执行权限:是脚本具有可执行属性

(3)执行脚本文件

(4)更完善的脚本构成

5、重定向操作

(1)交互式硬件设备

(2)重定向操作

6、管道操作符号“|”

二、Shell脚本变量

1、变量的作用、类型

(1)变量的作用

(2)变量的类型

2、自定义变量

(1)echo命令定义一个新的变量

(2)赋值时使用引号

(3)交互式定义变量

(4)设置变量的作用范围

(5)export命令

(6)整数变量的运算

3、特殊变量

(1)环境变量

(2)只读变量

(3)位置变量

(4)预定义变量

总结


引言

伴随着Linux系统的服务器应用越来越多,维护工作中存在着大量重复性的输入和交互操作,不仅费时费力还容易出错,自动化的维护越来越重要,这时编写Shell脚本程序,能够自动化、批量的解决维护工作,从而减轻了管理员本身的负担,从而提升工作效率,事半功倍。

一、Shell脚本概述

1、Shell脚本的概念

(1)Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可是交互也可以是非交互式的,我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们。

(2)不同的shell具备不同的功能,shell还决定了Linux中默认的shell是/bin/bash,流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途,目前大多数linux系统默认使用的是bash shell,默认登陆shell是/bin/bash,可以查看/etc/passwd文件里注明。

总结:将需要执行的命令保存到一个文件中,按照顺序执行,它不需要编译,它是解释型的。

2、Shell脚本应用场景

(1)自动化完成软件的安装部署,如安装部署LAMP架构服务;自动化完成系统的管理,如批量添加用户;自动化完成备份,如数据库定时备份。

(2)在需要完成大量复杂、重复性的工作时,不需要在命令行重复执行命令,直接运行shell脚本即可,大大的节省了时间提高了效率。

3、Shell的作用

(1)Linux系统中的Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

(2)常见的 Shell解释器程序有很多种,使用不同的Shell时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells文件可以了解当前系统所支持的Shell脚本种类。

[root@localhost ~]# cat /etc/shells 
/bin/sh     #(是bash命令的软链接,已经被/bin/bash所替换,/bin/bash基准于GNU的框架下发展出的Shell。)
/bin/bash     #(目前大多数Linux版本采用的默认shell)
/usr/bin/sh     #(己经被bash所替换。)
/usr/bin/bash     #(centos和redhat系统默认使用bash shell)
/bin/tcsh     #(csh的增强版,与csh完全兼容整合了csh,提供更多的功能。)
/bin/csh     #(已经被/bin/bash所替换(整合c shel,提供更多的功能))
注意点:nologin是奇怪的shell,这个shell可以让用户无法登录主机。

4、Shell编程规范

(1)编写脚本代码

①使用vim文本编辑器

②每行一条Linux命令,按执行顺序依次编写

③第一行为"#!/bin/bash",脚本申明(默认解释器)∶表示此行以下的代码语句是通过/bin/bash程序来执行。还有其他类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。

④注释信息:以"#”开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行可执行语句:如echo命令,用于输出" "之间的字符串。

[root@localhost ~]# vim first.sh
#!/bin/bash
cd /boot/
pwd
ls -lh vml*

(2)赋予可执行权限:是脚本具有可执行属性

[root@localhost ~]# chmod +x first.sh 

(3)执行脚本文件

①脚本文件路径(绝对路径与相对路径)—必须要有“x”权限

[root@localhost ~]# ./first.sh

②sh脚本文件路径

[root@localhost ~]# sh first.sh 

③source脚本文件路径

[root@localhost ~]# source first.sh

④bash脚本文件路径

[root@localhost ~]# bash first.sh 

(4)更完善的脚本构成

①脚本声明;②注释信息;③可执行语句

[root@localhost ~]# vim /first.sh
#!/bin/bash
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以vml开头的文件包括:"
ls -lh vml*

5、重定向操作

(1)交互式硬件设备

①标准输入:将从标准输入文件中读取在执行过程中需要的输入数据。

②标准输出:将执行后的输出结果发送到标准输出文件。

③标准错误:命令将执行期间的各种错误信息发送到标准错误文件。

类型

设备文件

文件描述编号

默认设备

标准输入

/dev/stdin

0

键盘

标准输出

/dev/stdout

1

显示器

标准错误输出

/dev/stderr

2

显示器

从键盘接收用户输入的各种命令字串、辅助控制信息,并将命令结果输出到屏幕上,如果命令执行出错,也会将错误信息反馈到屏幕上。

(2)重定向操作

类型

操作符

用途

重定向输入

<

从指定的文件读取数据,而不是从键盘输入

重定向输出

>

将输出结果保存到指定的文件(覆盖原有内容)

>>

将输出结果追加到指定的文件尾部

标准错误输出

2>

将错误信息保存到指定的文件(覆盖原有内容)

2>>

将错误信息追加到指定的文件中

混合输出

&>

将标准输出、标准错误的内容保存到同一个文件中

①重定向输入

重定向输入指的是将命令中接收输入的途径由默认的键盘改为指定的文件,而不是等待从键盘输入。通过重定向输入可以使一些交互式操作过程能够通过读取文件来完成。

例如,使用passwd命令为用户设置密码时,每次都必须根据提示输入两次密码字串,非常烦琐,若改用重定向输入将可以省略交互式的过程,而自动完成密码设置(结合passwd命令的"-stdin”选项来识别标准输入)。

[root@localhost ~]# vim pass.txt
123456
[root@localhost ~]# useradd lisi
[root@localhost ~]# passwd --stdin lisi < pass.txt 
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。

②重定向输出

重定向输出指的是将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上。

若重定向输出的目标文件不存在,则会新建该文件,然后将前面命令的输出结果保存到该文件中;若目标文件已经存在,则将输出结果覆盖或追加到文件中。

[root@localhost ~]# uname -p > kernel.txt
[root@localhost ~]# cat kernel.txt 
x86_64
[root@localhost ~]# uname -r >> kernel.txt 
[root@localhost ~]# cat kernel.txt 
x86_64
3.10.0-957.el7.x86_64

[root@localhost ~]# cat << 0 > a.txt
> 123
> 222
> 0
[root@localhost ~]# cat a.txt
123
222

③错误重定向

错误重定向指的是将执行命令过程中出现的错误信息(如选项或参数错误等)保存到指定的文件,而不是直接显示在屏幕上。

错误重定向使用"2>"操作符在实际应用中,错误重定向可用来收集程序执行的错误信息,为排错提供依据还可以将无关紧要的错误信息重定向到空文件/dev/null中,以保持脚本输出的简洁使用"2>"操作符时,会像使用">"操作符一样覆盖目标文件的内容,若要追加内容而不是覆盖文件,则应改用"2>>"操作符当命令输出的结果可能既包括标准输出(正常执行)信息,又包括错误输出信息时,可以使用操作符">""2>"将两类输出信息分别保存到不同的文件,也可以使用""&>"操作符将两类输出信息保存到同一个文件。

/dev/null:把它看作"黑洞",所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到,然而/dev/null对命令行和脚本都非常的有用。

[root@localhost ~]# echo file > /dev/null
[root@localhost ~]# cat /dev/null
#什么信息也看不到

④&>和>&符号

&表示等同于的意思,把正确和错误的消息输入到相同的位置。

1>&2把标准输出重定向到标准错误;2>&1把标准错误重定向到标准输出。

[root@localhost ~]# ls /etc/passwd xxx
ls: 无法访问xxx: 没有那个文件或目录
/etc/passwd
[root@localhost ~]# ls /etc/passwd xxx >a.txt
ls: 无法访问xxx: 没有那个文件或目录
[root@localhost ~]# cat a.txt
/etc/passwd
[root@localhost ~]# ls /etc/passwd xxx 2>a.txt
/etc/passwd
[root@localhost ~]# cat a.txt
ls: 无法访问xxx: 没有那个文件或目录

注意点:使用2>操作符时,会像使用〉一样覆盖目标文件的内容,若追加而不覆盖文件的内容即可使用2>>操作符。

6、管道操作符号“|”

(1)管道(pipe)操作为不同命令之间的协同工作提供了一种机制,位于管道符号"I"左侧的命令输出的结果,将作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。

(2)在Shell 脚本应用中,管道操作通常用来过滤所需要的关键信息。

[root@localhost ~]# rpm -qa | grep httpd
httpd-2.4.6-97.el7.centos.x86_64
httpd-tools-2.4.6-97.el7.centos.x86_64

[root@localhost ~]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
admin:x:1000:1000:admin:/home/admin:/bin/bash
[root@localhost ~]# grep "bash$" /etc/passwd | awk -F: '{print $1,$7}'(以冒号:分割,输出第1和第7个字段)
root /bin/bash
admin /bin/bash

[root@localhost ~]# df -Th | grep "/$" | awk '{print $6}'
10%

总结:重定向与管道操作是Shell环境中十分常用的功能,若能够熟练掌握并灵活运用,将有助于编写代码简洁但功能强大的shell脚本程序。

二、Shell脚本变量

1、变量的作用、类型

(1)变量的作用

①变量是用来临时保存数据的,并且该数据时可以变化的,任何一个语言都离不开变量,如果某个内容需要多次使用并且会重复出现,这样就可以使用变量了,如果需要修改直接修改变量就可以。

②常见 的Shell变量的类型包括:自定义变量、环境变量、只读变量、位置变量、预定义变量。

(2)变量的类型

①自定义变量:由用户自己定义、修改和使用

②特殊变量:环境变量、只读变量、位置变量、预定义变量

2、自定义变量

Bash中的变量操作相对比较简单,不像其他高级编程语言(如C/C++、Java等)那么复杂。在定义一个新的变量时,一般不需要提前进行声明,而是直接指定变量名称并赋给初始值(内容)即可。

(1)echo命令定义一个新的变量

①变量名以字母或下划线开头,区分大小写,建议全大写:变量名(临时存放数据的地方)=变量值(临时的可变化的数据),等号两边没有空格。变量名称需以字母或下划线开头,名称中不要包含特殊字符(如+、-、*、l、.、?、%、&、#等)

②用echo查看和引用变量的值,通过在变量名称前添加前导符号"$",可以引用一个变量的值,使用echo 命令可以查看变量。

[root@localhost ~]# Product=Python
[root@localhost ~]# Version=2.7.13           
[root@localhost ~]# echo $Product $Version 
Python 2.7.13

③当变量名称容易和紧跟其后的其他字符相混淆时,需要添加大括号"{ }"将其括起来,否则将无法确定正确的变量名称。对于未定义的变量,将显示为空值。

[root@localhost ~]# echo ${Product}2.5
Python2.5
[root@localhost ~]# echo ${test}RMB
RMB

④使用echo时的选项

\c:不换行输出,在"\c"后面不存在字符的情况下,作用相当于echo -n;

\n:换行;

\t:转义后表示插入tab,即制表符;

[root@localhost ~]# echo -n hello
hello[root@localhost ~]# 
[root@localhost ~]# echo -e "hello\t"
hello

注意点:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出"s"符号,而不当做是变量引用。

[root@localhost ~]# echo $VAR1

[root@localhost ~]# echo \$VAR1
$VAR1

⑤取消定义:unset 变量名

(2)赋值时使用引号

①双引号:允许通过$符号引用其他变量值

[root@localhost ~]# Version=2
[root@localhost ~]# Pver="python $Version"
[root@localhost ~]# echo $Pver
python 2

②单引号:禁止引用其他变量值,$视为普通字符

[root@localhost ~]# test=123
[root@localhost ~]# echo "$test"
123
[root@localhost ~]# echo '$test'
$test

③反撇号:命令替换,提取命令执行后的输出结果

[root@localhost ~]# ls -lh `which useradd`
-rwxr-x---. 1 root root 116K 10月 31 2018 /usr/sbin/useradd
[root@localhost ~]# time=`date +%Y-%m-%d-%T`
[root@localhost ~]# echo $time
2021-09-02-20:21:19

④使用反撇号难以在一行命令中实现嵌套命令替换操作,这时可以改用“$()"来代替反撇号操作,以解决嵌套的问题。

[root@localhost ~]# rpm -qc $(rpm -qf $(which useradd))
/etc/default/useradd
/etc/login.defs

(3)交互式定义变量

①除了上述赋值操作以外,还可以使用Bash 的内置命令read 来给变量赋值。用来提示用户输入信息,从而实现简单的交互过程。执行时将从标准输入设备(键盘)读入一行内容,并以空格为分隔符,将读入的各字段依次赋值给指定的变量(多余的内容赋值给最后一个变量)。若指定的变量只有一个,则将整行内容赋值给此变量。

[root@localhost ~]# read test
123
[root@localhost ~]# echo $test
123

②read常用选项

-p:提示用户的信息

-n:定义字符数

-s:不显示用户输入的内容,常用于输入密码(read -s -p "input your password:" pass)

-t定义超时时间,超过多长时间没输自动退出

[root@localhost ~]# echo 192.168.100.100 > ip.txt
[root@localhost ~]# cat ip.txt
192.168.100.100
[root@localhost ~]# read -p "input your ip:" IP < ip.txt 
[root@localhost ~]# echo $IP
192.168.100.100

(4)设置变量的作用范围

默认情况下,新定义的变量只在当前的Shell 环境中有效,因此称为局部变量,当进入子程序或新的子Shell环境时,局部变量将无法再使用。

[root@localhost ~]# bash
[root@localhost ~]# echo $name

[root@localhost ~]# echo $test

(5)export命令

为了使用户定义的变量在所有的子Shell环境中能够继续使用,减少重复设置工作,可以通过内部命令export将指定的变量导出为全局变量。用户可以同时指定多个变量名称作为参数(无须使用"$"符号),变量名之间以空格分隔。

①格式1:export 变量名

②格式2:export 变量名=变量值

[root@localhost ~]# read Product
Python
[root@localhost ~]# read Version
2.7.13
[root@localhost ~]# export Product Version(导出为全局变量)
[root@localhost ~]# bash
[root@localhost ~]# echo $Product $Version(子程序引用全局变量)
Python 2.7.13
[root@localhost ~]# echo "$Product $Version"
Python 2.7.13

使用export导出全局变量的同时,也可以为变量进行赋值,这样在新定义全局变量时就不需要提前进行赋值了env查看用户当前环境变量。

[root@localhost ~]# env
[root@localhost ~]# export ABC=123
[root@localhost ~]# env     #(能看到了 ABC=123)
[root@localhost ~]# export -n ABC     #(取消定义的全局变量变成局部变量)
[root@localhost ~]# env

(6)整数变量的运算

在 Bash Shell环境中,只能进行简单的整数运算,不支持小数运算整数值的运算主要通过内部命令expr进行,运算符与变量之间必须有至少一个空格。

①运算内容:+、-、\*、/、%

+:加法运算。

-:减法运算。

\*:乘法运算,注意不能仅使用"*"符号,否则将被当成文件通配符。

/:除法运算。

%:求模运算,又称为取余运算,用来计算数值相除后的余数。

②运算符号:$ (())和$[]

[root@localhost ~]# echo $((4+8))
12
[root@localhost ~]# echo $((12-6))
6

[root@localhost ~]# read a
12
[root@localhost ~]# read b
4
[root@localhost ~]# echo $((a-b))
8
[root@localhost ~]# echo $((b-a))
-8

[root@localhost ~]# echo $((4*6))
24
[root@localhost ~]# echo $[4*6]
24

③运算命令:expr和let

[root@localhost ~]# expr 1 + 1
2
[root@localhost ~]# expr 10 - 3
7
[root@localhost ~]# expr 8 \* 7
56
[root@localhost ~]# expr 8 '*' 7
56
[root@localhost ~]# expr 10 / 2
5
[root@localhost ~]# expr 5 % 6
5
[root@localhost ~]# X=7
[root@localhost ~]# Y=4
[root@localhost ~]# expr $X + $Y
11

[root@localhost ~]# sum=`expr $X '*' $X '*' $Y`
[root@localhost ~]# echo $sum
196
[root@localhost ~]# vim sum.sh
#!/bin/bash
#1、定义输入数字
read -p "请输入第一个数字:" num1
read -p "请输入第二个数字:" num2
#2、执行加法运算
expr $num1 + $num2
[root@localhost ~]# sh sum.sh 
请输入第一个数字:192
请输入第二个数字:52
244
[root@localhost ~]# n=3;let n=n+1;echo $n
4
[root@localhost ~]# let n+=2
[root@localhost ~]# echo $n
6
[root@localhost ~]# let n=n**2
[root@localhost ~]# echo $n
36

[root@localhost ~]# read x
21
[root@localhost ~]# echo $x
21
[root@localhost ~]# echo $[x++]
21
[root@localhost ~]# echo $x
22
[root@localhost ~]# echo $[++x]
23
[root@localhost ~]# echo $x
23

④运算工具: bc(系统自带)

[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
11/4
2
scale=4     #(小数点后几位)
11/4
2.7500

[root@localhost ~]# echo "scale=5;11/3" | bc
3.66666

[root@localhost ~]# echo "2^10" | bc
1024

[root@localhost ~]# a=11
[root@localhost ~]# b=5
[root@localhost ~]# echo "$a*$b" | bc
55
[root@localhost ~]# echo "scale=2;$a/$b" | bc
2.20

#bc还可以做逻辑运算,真为1,假为0
[root@localhost ~]# echo "3>2" | bc
1
[root@localhost ~]# echo "3<2" | bc
0
[root@localhost ~]# echo "3==2" | bc
0

3、特殊变量

(1)环境变量

①环境变量指的是出于运行需要而由Linux系统提前创建的一类变量,主要用于设置用户的工作环境,包括用户宿主目录、命令查找路径、用户当前目录、登录终端等。环境变量的值由Linux系统自动维护,会随着用户状态的改变而改变。

②USER表示当前账户的账户名称;HOME表示用户的宿主目录;LANG表示语言和字符集;PWD表示当前所在的工作目录;PATH表示命令搜索路径等;RANDOM表示随机数,会返回0-32767的整数。

[root@localhost ~]# echo $USER
root
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
[root@localhost ~]# echo $PWD
/root
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo $RANDOM
13035

③PATH变量用于设置可执行程序的默认搜索路径,当仅指定文件名称来执行命令程序时,Linux系统将在 PATH变量指定的目录范围查找对应的可执行文件,如果找不到则会提示"command not found”。

[root@localhost ~]# sum.sh
bash: sum.sh: 未找到命令...
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# pwd
/root
[root@localhost ~]# PATH="$PATH:/root"
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root
[root@localhost ~]# sum.sh
-bash: /root/sum.sh: 权限不够
[root@localhost ~]# chmod +x sum.sh 
[root@localhost ~]# sum.sh
请输入第一个数字:1
请输入第二个数字:1
2

(2)只读变量

Shell变量中有一种特殊情况,一经设定其值是不可改变的,这种变量被称为只读变量。在创建变量的时候可将其设置为只读属性,也可以将已存在的变量设置为只读属性,只读变量主要用于变量值不允许被修改的情况只读变量不可以改变值也不可以被删除。

[root@localhost ~]# test=file
[root@localhost ~]# readonly test 
[root@localhost ~]# echo $test 
file
[root@localhost ~]# test=file1
-bash: test: 只读变量
[root@localhost ~]# unset test 
-bash: unset: test: 无法反设定: 只读 variable

(3)位置变量

当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。位置变量也称为位置参数,使用$1、$2、$3、...、$9表示,命令或脚本本身的名称使用“$0"表示。

[root@localhost ~]# vim user.sh
#!/bin/bash
useradd $1
echo $2 | passwd --stdin $1
[root@localhost ~]# sh user.sh zhangsan 123456
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新
[root@localhost ~]# vim num.sh
#!/bin/bash
SUM=`expr $1 + $2`
echo "$1 + $2 = $SUM"
[root@localhost ~]# sh num.sh 13 17
13 + 17 = 30

(4)预定义变量

预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用"$"符号和另一个符号组合表示。

$#:表示命令行中位置参数的个数。
$*:表示所有位置参数的内容,这些内容当做一个整体。
$@:表示列出所有位置参数,但是是以单个的形式的列出。
$?:表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非。0值均表示执行出现异常。
$0:表示当前执行的脚本或程序的名称。
$$:表示返回当前进程的进程号。
$!:返回最后一个后台进程的进程号。
[root@localhost ~]# vim test.sh
#!/bin/bash
echo “当前脚本名称为:$0”
[root@localhost ~]# sh test.sh 1 2 3 4
“当前脚本名称为:test.sh”
[root@localhost ~]# vim test.sh
#!/bin/bash
echo “当前脚本一共有$#个参数”
[root@localhost ~]# sh test.sh 1 2 3 4
“当前脚本一共有4个参数”
[root@localhost ~]# vim test.sh
#!/bin/bash
echo "$*"
touch "$*"
[root@localhost ~]# sh test.sh 1 2 3 4
1 2 3 4
[root@localhost ~]# ll /root
-rw-r--r--  1 root root    0 9月   3 20:15 1 2 3 4
[root@localhost ~]# vim test.sh
#!/bin/bash
echo "$@"
touch "$@"
[root@localhost ~]# sh test.sh 1 2 3 4
1 2 3 4
[root@localhost ~]# ll /root
-rw-r--r--  1 root root    0 9月   3 20:17 1
-rw-r--r--  1 root root    0 9月   3 20:17 2
-rw-r--r--  1 root root    0 9月   3 20:17 3
-rw-r--r--  1 root root    0 9月   3 20:17 4

总结

1、Shell的作用:是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

2、Shell的应用场景:自动化完成软件的安装部署,如安装部署LAMP架构服务;自动化完成系统的管理,如批量添加用户;自动化完成备份,如数据库定时备份。在需要完成大量复杂、重复性的工作时,不需要在命令行重复执行命令,直接运行shell脚本即可,大大的节省了时间提高了效率。

3、Shell脚本的编写规范:使用vim文本编辑器;每行一条Linux命令,按执行顺序依次编写;第一行为"#!/bin/bash"。

4、Shell脚本的执行方法:脚本文件路径(绝对路径与相对路径)执行,但必须要有“x”权限;sh脚本文件路径执行;source脚本文件路径执行;bash脚本文件路径执行。

5、重定向的作用与使用方法:标准输入(0)、标准输出(1)、标准错误(2);

重定向输入(<)、重定向输出>>>)、标准错误输出2>2>>)、混合输出&>)。

6、管道的作用与使用方法:为不同命令之间的协同工作提供了一种机制;将左侧的命令输出结果,作为右侧命令的处理对象。

7、自定义变量赋值时:双引号(允许通过$符号引用其他变量值);单引号(禁止引用其他变量值,$视为普通字符);反撇号(命令替换,提取命令执行后的输出结果)。

8、数值变量的常用运算符:+、-、\*、/、%。

9、环境变量:由Linux系统提前创建的一类变量,主要用于设置用户的工作环境,包括用户宿主目录、命令查找路径、用户当前目录、登录终端等

10、只读变量:主要用于变量值不允许被修改的情况只读变量不可以改变值也不可以被删除。

11、位置变量:当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。

12、预定义变量:预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:57:06  更:2021-09-04 17:59:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:33:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码