参考网址为:【小白入门 通俗易懂】2021韩顺平 一周学会Linux_哔哩哔哩_bilibili
请大家多多支持韩老师~
大部分内容为教程内容,也有部分自己实验和添加的内容,如涉及侵权,会进行删除。
一、Shell简介
1、Shell:命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序。用户可以用Shell来启动、挂起、停止甚至是编程一些程序。 文件格式:xxx.sh
2、Shell脚本的执行方法
(1)脚本格式要求
a 通常以 #!/bin/bash开头
b 有可执行权限
(2) 脚本常用执行方式
方式1:输入脚本的绝对路径或相对路径(需要先赋予其x执行权限)
方式2:sh+脚本(不用赋予x权限)
示例:hello.sh
(1)创建hello.sh脚本:
[root@SHUYUAN ~]# cd /root/shcode/
[root@SHUYUAN shcode]# ls
[root@SHUYUAN shcode]# vim hello.sh
(2)编辑内容
#!/bin/bash
echo "hello,world~"
(3)执行方式1:相对路径
[root@SHUYUAN shcode]# chmod u+x hello.sh
[root@SHUYUAN shcode]# ll
总用量 8
-rwxr--r--. 1 root root 34 8月 4 10:07 hello.sh
-rwxr--r--. 1 root root 223 7月 28 20:04 var.sh
[root@SHUYUAN shcode]# ./hello.sh
hello,world~
执行方式2:绝对路径
[root@SHUYUAN shcode]# /root/shcode/hello.sh
hello,world~
[root@SHUYUAN shcode]#
执行方式3:sh+脚本
[root@SHUYUAN shcode]# sh hello.sh
hello,world~
二、Shell变量
1、shell变量介绍
(1)变量分类:a 系统变量;b 自定义变量
(2)系统变量:$HOME、$PWD、$SHELL、$USER……
(3) 显示当前shell中所有变量:set
2、shell变量的定义
a 定义变量:变量名=值(中间不能打空格)
b 撤销变量:unset
c 声明静态变量:readonly变量
示例:
1 #!/bin/bash
2 #案例1:定义变量A
3 A=100
4 #输出变量需要加上$
5 echo A
6 echo A=$A
7 echo "A=$A"
8
9 #案例2:撤销变量A
10 unset A
11 echo "A=$A"
12 #输出A=
13
14 #案例3:声明静态的变量B=2,不能unset
15 readonly B=2
16 echo "B=$B"
17 #输出B=2.静态变量不能unset
18 unset B
输出如下:
A
A=100
A=100
A=
B=2
./var.sh: 第 18 行:unset: B: 无法反设定: 只读 variable
3、shell变量的定义规则
(1)变量名称可以由字母、数字、下划线组成,不能以数字开头
(2)等号两侧不能有空格
(3)变量名称一般习惯大写(小写不规范)
4、将命令的返回赋值给变量
(1)A=`date`反引号(同波浪键),运行里面的命令,并将结果返回给变量A
(2)A=$(date)等价于反引号
示例:
20 #将指令返回的结果赋给变量
21 C=`date`
22 D=$(date)
23 echo "C=$C"
24 echo "D=$D"
输出结果:
C=2021年 08月 04日 星期三 10:49:00 CST
D=2021年 08月 04日 星期三 10:49:00 CST
三、设置环境变量
1、基本语法
(1)export 变量名=变量值 (将shell变量输出为环境变量/全局变量)
(2)source 配置文件 (让修改后的配置信息立即生效)
(3)echo $变量名 (查询环境变量的值)
2、示例:设置环境变量TOMCAT_HOME
[root@SHUYUAN shcode]# vim /etc/profile
#定义一个环境变量
export TOMCAT_HOME=/opt/tomcat
[root@SHUYUAN shcode]# source /etc/profile
[root@SHUYUAN shcode]# echo $TOMCAT_HOME
/opt/tomcat
四、位置参数变量
1、执行shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
2、基本语法
(1)$n n为数字,$0表示命令本身,$1-$9表示第一到第九个参数
10以上的参数用大括号:${10}
(2)$* 表示命令行中所有的参数,当成整体
(3)$@ 表示命令行中所有参数,把每个参数区分对待
(4)$# 表示命令行中所有参数的个数
示例:编写一个shell脚本position.sh,在脚本中获取到命令行的各个参数信息。
(1)创建myshell.sh脚本:
[root@SHUYUAN shcode]# vim myshell.sh
(2)编辑内容:
1 #!/bin/bash
2 echo "0=$0 1=$1 2=$2"
3 echo "所有的参数=$*"
4 echo "$@"
5 echo "参数的个数=$#"
(3)输出结果:
[root@SHUYUAN shcode]# chmod u+x myshell.sh
[root@SHUYUAN shcode]# ./myshell.sh 100 200
0=./myshell.sh 1=100 2=200
所有的参数=100 200
100 200
参数的个数=2
五、预定义变量
1、概念:shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
2、基本语法
(1)$$ 当前进程的进程号PID
(2)$! 后台运行的最后一个进程的进程号 PID
(3)$? 最后一个执行的命令的返回状态。0:命令正确执行;非0:命令执行不正确
示例:在preVar.sh脚本中简单使用一下预定义变量
(1)创建preVar.sh脚本:
[root@SHUYUAN shcode]# vim myshell.sh
(2)编辑内容 :
1 #!/bin/bash
2 echo "当前执行的进程id=$$"
3 #以后台的方式运行一个脚本,并获取他的进程号
4 /root/shcode/myshell.sh &
5 echo "最后一个后台方式运行的进程id=$!"
6 echo "执行的结果是=$?"
(3)输出结果:
[root@SHUYUAN shcode]# chmod u+x preVar.sh
[root@SHUYUAN shcode]# ./preVar.sh
当前执行的进程id=8810
最后一个后台方式运行的进程id=8811
执行的结果是=0
[root@SHUYUAN shcode]# 0=/root/shcode/myshell.sh 1= 2=
所有的参数=
参数的个数=0
^C