shell介于用户和计算机内核之间,充当翻译的角色,负责接收用户输入的操作指令并进行翻译,将需要执行的操作传递给内核执行,并输出执行结果。脚本语言,又称扩建语言、动态语言,也是编程语言的一种,主要用来控制软件应用程序。都是以文本形式保存,只有在被调用的时候文本代码才会编译执行。(创建脚本通常以.sh结尾表示shell脚本)
(若无特殊说明,默认使用的shell就是bash)
如何查看用户使用的shell:
/etc/passwd:查看用户信息
1、脚本文件路径(需要x权限)
绝对路径执行
相对路径执行
2、sh脚本文件路径(不需要x权限)
3、source或.脚本文件路径(不需要x权限)
创建一个脚本文件:
[root@pup1 opt]# vim first.sh
cd /boot
echo "显示当前所在路径:"
pwd
echo "显示当前目录下vml开头的文件:"
ls -lf vml*
绝对路径的执行方式:
sh 脚本名:只在当前环境运行,并不涉及子shell环境切换
source或.脚本名:对于刚刚修改的文件进行初始化操作(文件的内容都是shell语句,都是可执行的命令)执行source可以不需要重启,使更改内容直接生效
新建一个shell,继续执行,而且所有的执行结果都会保存在这个新建的shell中
注:
需要执行的脚本不能放在用户的家目录,最好都放在opt目录当中
结合定时任务执行时必须要使用绝对路径
标准输入:对应设备为键盘,文件编号是0,正常执行的命令结果
标准输出:显示器,显示输出的结果
标准错误输出:显示器,显示错误的输入信息
重定向输入:
<:从指定的文件读取数据,不是从键盘输入读取
重定向输出:
>:将输出结果保存到指定的文件(覆盖原有内容)
>>:将输出结果追加到指定的文件尾部(不会覆盖原有内容)
重定向错误输出:
2>:将错误信息保存到指定的文件(覆盖原有内容)
2>>:将错误信息追加到指定的文件中
混合输出:
&>:将标准输出、标准错误的内容保存到同一个文件之中
将左侧命令的输出结果作为右侧命令的输入(处理对象)
用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置、系统环境的变化而变化
变量属性:值的类型
int:整数类型
string:字符串类型
布尔:true、false
浮点:即小数
自定义变量:由用户自己定义、修改和使用
特殊变量:环境变量、只读变量、位置变量、预定于变量
环境变量:由系统维护,用于设置工作环境
位置变量:通过命令行给脚本程序传递参数
预定义变量:Bash中内置的一类变量,不能直接修改
在自定义变量当中,若赋值整数类型可以不加引号,赋值为字符串类型最好加上引号,以避免歧义
变量名=变量值
echo $变量名
在给变量赋值时,单引号和双引号一样,不影响变量的值
``:命令替换,先执行反撇号当中的命令,然后再把命令执行的结果赋值给变量
[root@pup1 opt]# abc=123
[root@pup1 opt]# echo '$abc' //'$abc':强引用,变量值将不再打印,就是$abc这个字符串
$abc
[root@pup1 opt]# echo "$abc" //"$abc":弱引用,原变量的值不变
123
[root@pup1 opt]# echo "${abc}" //"${abc}":保证一定能够正确地识别变量值
123
[root@pup1 opt]# result=`echo ${abc}456`
[root@pup1 opt]# echo $result
123456
read -p 提示信息 变量名
[root@pup1 opt]# read -p "输入一个数值赋予变量:" a
输入一个数值赋予变量:5
[root@pup1 opt]# echo $a
5
1、不要使用Linux的系用命令作为变量名
2、不要使用中文定义
3、不要使用特殊符号作为变量名称的开头,可以使用_作为变量的开头
4、默认规则:定义学生--student;秒--second/sec 、;计算机--computer
5、默认加上注释,变量名的引用保持前后一致
局部变量和全局变量
默认情况下,新定义的变量只在当前的shell环境中生效,因此成为u局部变量。当进入子程序或新的子Shell环境时局部变量将无法再使用。
可以通过内部命令export将指定的变量到处为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。
格式:
export 变量名
export 变量名=变量值
[root@pup1 opt]# abc=123
[root@pup1 opt]# echo $abc //查看变量abc的值为123
123
[root@pup1 opt]# bash //进入子shell环境
[root@pup1 opt]# echo $abc //查看变量,无法显示值
[root@pup1 opt]# exit //回到原shell环境
exit
[root@pup1 opt]# export abc //将其输出为全局变量
[root@pup1 opt]# echo $abc
123
[root@pup1 opt]# bash //再次切换至子shell环境
[root@pup1 opt]# echo $abc //再次查看变量的值,发现可查看
123
注:需要在一整套环境当中引用唯一且不需要变化的变量时,才会声明全局变量
定义:系统提前创建,用户也可以添加,设置用户的工作环境,配置系统行为,控制程序执行
特殊的全局变量。
常见环境变量
$USER:显示用户的名称
$HOME:用户的家目录
$PWD:表示当前所在的工作目录
$PATH:可执行用户程序的默认路径
当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量
$n:n为数字,$0代表命令本身,$1-$9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为${10}
编程语言或者脚本解释器所提供,不能修改,只能根据需要自动设置或者更新
$*、$@:表示命令或者脚本需要处理的参数
$*和$@:不加引号的表现一致,都会把参数分行处理
$*:加上引号,会把参数当成一行来进行处理
[root@pup1 opt]# vim sec.sh
abc () {
for i in $*
do
echo $i
done
}
abc "hello" "world" "!"
[root@pup1 opt]# sh sec.sh
hello
world
!
[root@pup1 opt]# vim sec.sh
abc () {
for i in "$*"
do
echo $i
done
}
abc "hello" "world" "!"
[root@pup1 opt]# sh sec.sh
hello world !
$#:显示需要处理的参数个数
$?:表示前一条命令或者脚本执行之后的返回状态码,只有返回0,表示执行成功,所有非0全部表示执行失败
也可以用在函数中,作为return的返回值
运算符号: + 加法、- 减法、* 乘法、/ 除法、%取余
例子:(c代表自定义变量,可用任何代替)
c=$((变量1 运算符 变量2))
c=$[变量1 运算符 变量2]
c=$(expr变量1 运算符 变量2)
let c=变量1 运算符 变量2
i++:相当于i=$(($+1))每一次都会自增1(先赋值,再加一)
++i:先加1,再赋值
i+=2相当于i=$(($+2))
[root@pup1 opt]# echo "1.1+2.2" |bc
3.3
使用awk进行浮点数的运算
格式:awk "BEGIN{print 算术表达式}"
[root@pup1 opt]# awk "BEGIN{print 1.1+2.2}"
3.3