目录
一、Shell脚本概述
1.Shell脚本的概念
2.Shell脚本应用场景
3.Shell的作用
4.Shell的类型
5.Shell脚本的构成
6.Shell脚本的执行
7.脚本调试(debug)
二、管道符操作
三、重定向
1.交互式硬件设备
2.重定向操作
三、Shell脚本变量
1.变量的作用
2.变量的规范
变量名:
3.变量类型
3.1 环境变量
3.2 只读变量
3.3 位置变量
3.4 预定义变量
4.赋值的特殊符号的常用用法
Shell(壳) 是一类程序的总称,用于将人类使用的高级语言转换成机器能看懂的二进制语言,为用户和内核之间的交互提供接口。
[root@loaclhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
......
最常用的就是bash、tcsh、csh、sh、nologin
1.脚本申明(解释器):
若第一行为“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行,
#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
2.注释信息:
以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。
3.可执行语句:
比如echo命令,用于输出" "之间的字符串
/root/first.sh #指定绝对路径执行
./first.sh #指定相对路径执行
#文件需有x(可执行)权限
sh first.sh #指定Shell脚本解释脚本
. first.sh 或
source first.sh #点命令
bash -n "脚本名称"
bash -x "脚本名称"
将管道符号“|”左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。
ps aux | wc -l
echo "abc123" | passwd --stdin zhangsan
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据 |
重定向输出 | > | 将标准输出结果保存到指定的文件,并覆盖其原有内容 |
>> | 将标准输出结果追加到指定文件的尾部,不覆盖其原有内容 | |
重定向错误输出 | 2> | 将错误信息保存到指定文件,并覆盖其原有内容 |
2>> | 将错误信息追加到指定文件的尾部,不覆盖其原有内容 | |
混合输出 | &> | 将标准输出、标准错保存到同一文件中 |
2>&1 | 将标准错误输出重定向到标准输出 |
用来存放系统和用户需要使用的特定参数(值)
变量值:
能够根据用户设置、系统环境的变化而变化(int string 布尔 浮点 ......)
环境变量是由系统维护,用于设置工作环境,环境变量在计算机系统中广泛使用,用于配置系统行为、传递信息和控制程序的执行。
这些变量对整个操作系统及其所有用户都是可见的。
例如,PATH变量存储了操作系统查找可执行文件的路径列表。
这些变量只对当前用户可见。每个用户可以定义自己的环境变量,用于满足个人需求。
例如,HOME变量指定了当前用户的主目录路径。
操作系统或应用程序预先定义了一些常用的环境变量,用于提供特定的信息和功能。
例如,USER变量保存当前用户名,LANG变量指定了当前系统的默认语言。
用户和应用程序可以定义自己的环境变量,用于存储特定的信息或配置。
这些变量可以根据需要随时创建、修改和删除。
只读变量是指在程序中被声明后,其值在程序的后续执行过程中不能被修改的变量。
这种变量通常用于存储那些一旦设定就不应改变的数据,如配置参数、数学常数等。不同的编程语言对只读变量的实现方式和命名规则可能有所不同,但基本的概念是一致的。
位置变量(Positional Variables),也称为命令行参数(Command-Line Arguments),是在运行脚本或程序时传递给它们的值。位置变量用于将外部数据传递给脚本或程序,以便根据需要进行处理。
$n:n为数字,$0代表命令本身,$1-$9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为${10}
预定义变量:通常由编程语言或脚本解释器提供,并根据需要自动设置和更新,不能修改。
变量 | 解释 |
---|---|
$* | 把所有参数看成以空格分隔的一个字符串整体(单字符串)返回。例:"$1 $2 $3 $4"。 |
$@ | 把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回。例:"$1" "$2" "$3" "$4" |
$0 | 表示当前执行的脚本或命令的名称 |
$# | 表示命令或脚本要处理的参数的个数 |
$? | 表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。也常被用于Shell脚本中return退出函数并返回的退出值 |
双引号 - " "
含义和用途:
在Shell脚本或命令行中,双引号用于定义字符串。当字符串被双引号包围时,其中的大多数特殊字符(如$, `, \, 和")会被特殊处理,而其他字符则按其原义处理。
单引号 - ' '
含义和用途:
与双引号类似,单引号也用于定义字符串。但是,被单引号包围的字符串中的所有字符都会按其原义处理,不会发生任何扩展或替换。
感叹号 - !
含义和用途:
在Shell脚本中,感叹号通常用于表示历史替换。例如,在bash中,!! 表示上一个命令,而!n(其中n是数字)可以表示历史中的第n个命令。
小括号 - ( )
含义和用途:
在正则表达式中,小括号用于捕获组,可以匹配并记住匹配的子串,以便后面引用。在Shell脚本中,它们也用于创建子shell或定义数组。
中括号 - [ ]
含义和用途:
在正则表达式中,中括号用于定义字符集,匹配方括号中的任意一个字符。在Shell脚本中,它们也用于数组索引和条件测试。
双小括号 - (( ))
含义和用途:
在Shell脚本中,双小括号用于算术扩展和算术运算。
双中括号 - [[ ]]
含义和用途:
在bash等某些Shell中,双中括号用于条件测试,提供了比单中括号更强大的功能。
大括号 - { }
含义和用途:
在Shell脚本中,大括号用于扩展字符串或序列,也用于定义代码块。在正则表达式中,它们不常用,但在某些扩展的正则表达式语法中可能表示数量的范围。