脚本
脚本
什么是脚本
脚本语言又被称为扩建的语言,或者动态语言,是一种编程语言, 用来控制软件应用程序,脚本通常是以文本 (ASCⅡ) 保存,只是在被调用时进行解释或者编译。
构成
脚本的编写都是采用某一种编程语言;如:Scala、JavaScript,VBScript,ActionScript,MAX Script,ASP,JSP,PHP,SQL,Perl,Shell,Python,Ruby,JavaFX,Lua,AutoIt
常用的脚本语言为:Python;C;C++;java等
shell脚本
Shell 脚本,是一种为 Shell 编写的脚本程序,类似 Windows的 bat 脚本,区别在于 bat 是用于操作 [Windows ](https://baike.baidu.com/item/Windows /165458?fromModule=lemma_inlink)操作系统,而 Shell 脚本用于操作 Linux 系统。
shell脚本的组成
- 脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect
- 注释信息:以#开头的语句表示为注释信息 # 注 释
- 可执行语句:比如echo命令用于输出“ ”之间的字符串
脚本执行逻辑
-
顺序执行:程序按从上到下顺序执行
-
选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
-
循环执行:程序执行过程中需要重复执行多次某段语句
执行方式
1.指定路径去执行文件(需要有执行权限)
[root@localhost ~]# chmod +x /root/host.sh 加权限
指定相对路径./host.sh
指定绝对路径/root/host.sh
2.指定shell解释器(bash)去执行(不需要权限)
[root@localhost data]# bash yum.sh
#使用bash来执行写的脚本
#bash是新开一个bash来执行
3.source / . (点=source)(不需要权限)
[root@localhost data]# source yum.sh
#使用source/.来执行写的脚本
#source/. 是在本bash执行脚本
变量
变量的定义
什么是变量
变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。
变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变的。
如何定义变量
定义变量的过程涉及确定变量的类型、名称、以及可能的初始值。
变量类型:首先,需要确定变量的类型,这决定了变量能够存储的数据类型,如整数、浮点数、字符串等。不同类型的变量在内存中占用的空间大小不同,且能够存储的数据类型也不同。
变量名称:其次,给变量一个名称,这个名称用于在代码中引用该变量。变量名应该具有描述性,能够清晰地表达变量的用途或含义。
初始值:在定义变量时,可以为其指定一个初始值。这个值是变量在程序开始时或被创建时的初始状态。如果未指定初始值,则变量的值可能为空或不确定。
在shell中定义变量
[root@localhost ~]# name='value' #变量名=变量值
[root@localhost ~]# echo "$name" #用echo "$变量名"
value
[root@localhost ~]#unset 变量名 #取消 变量
注意:变量赋值是临时生效,当退出终端后,变量会自动删除,无法持久保存,脚本中的变量会随着脚本结束,也会自动删除
[root@centos8 ~]#TITLE=CTO #变量名+=追加值
[root@centos8 ~]#TITLE+=:wang
[root@centos8 ~]#echo $TITLE
CTO:wang
变量的类型
环境变量
- 由系统提前创建,用来设置用户的工作环境
- 可以使用env查看环境变量
- 需要记住的常用环境变量
环境变量:
- 可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量
- 一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程
- 一般只在系统配置文件中使用,在脚本中较少使用
$USER 表示用户名称
[root@localhost ~]# echo "$USER"
root
$HOME 表示用户的宿主目录
[root@localhost ~]# echo "$HOME"
/root
$LANG 表示语言和字符集
[root@localhost ~]# echo "$LANG"
zh_CN.UTF-8
$PWD 表示当前所在工作目录
[root@localhost ~]# echo "$PWD"
/root
$PATH 表示可执行用户程序的默认路径
[root@localhost ~]# echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
只读变量
变量值不允许修改(重新赋值)的情况
无法使用 unset删除
最快方法重启
[root@localhost ~]# name=ky15
[root@localhost ~]# readonly name #将变量设为只读变量
[root@localhost ~]# echo $name
ky15
[root@localhost opt]# unset name
bash: unset: name: 无法反设定: 只读 variable
#只有退出进程。
位置变量
位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示
echo "$1" 位置1
echo "$2" 位置2
echo "${10}" 位置10
echo "$10" 位置1和0
echo "$*" 将所有项当成一个值
echo "$@" 所有项
echo "$0" 脚本自身
echo "$#" 后面参数的个数
预定义变量
bash 帮你定义好了 拿来用就可以了,你不需要知道为什么,记住
- $*:表示所有位置参数的内容看成一个整体返回 返回所有
- $@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有
- $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
- $#:表示命令行中位置参数的总个数
- $0:表示当前执行的脚本或程序的名称 当前脚本的名字
- $$:当前bash的进程id
- $!: 后台任务最后一个id
条件语句
if
用法:
单方支:
if 命令; then 命令; fi
双分支:
if 命令; then 命令;else 命令;fi
多分支:
if 命令; then 命令;elif 命令;..............
else 命令;fi
case
case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac
read -p i
case $i in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默认分支
;;