shell是UNIX/Linux系统中一个重要的层次,它是用户与系统交互作用的界面。即用户通过shell完成对计算机的控制。shell是用户和操作系统之间的接口作为核外程序而存在。
shell脚本的建立
shell
脚本是一个文件,其中包含将由
shell
执行的一系列命令。当运行一个shell脚本时,脚本文件中的每一条命令被传送
给shell执行。
方法:利用编辑器(如vi)
shell脚本的执行
shell脚本的执行方式有三种:
1:输入定向到shell(该方式用输入重定向方式让shell从给定文件中读入命令行,并进行相应处理)其一般形式为:
$bash<脚本名
2:以脚本名作为bash参数(可以在脚本名后带参数从而将参数值传递给程序中的命令)
$bash脚本名【参数】
3:将shell脚本的权限设置为可执行,然后在提示符下直接执行。
shell特殊字符
一般通配符,引号,注释
(
*):
功能是匹配
任意字符的出现。
(
?
):
功能:是匹配任意
一个字符
。
([ ]):功能是匹配括号内所限定的任何一个
字符。
(““):功能是双引号括起来的字符作为普通字符对待。
$ ,倒引号,反斜线这三个任然保留其特殊功能。
$表示变量替换,用预先指定的变量值代替$和变量。
倒引号表示命令替换
反斜线在后面字符是¥
`”\换行符之一时,表示转义字符,即不对后面字符特殊处理
单引号
’
功能:
单引号括起来的字符都作为普通字符。
单引号保留空白符
用
反斜杠消除单引号的特殊含义
倒引号
`
:也称为命令替换符
倒引号括起来的字符串被
shell
解释为命令行,每次先执行该命令行,然后用标准输出取代整个倒引号部分。
可利用这个功能进行
-
命令置换,即把倒引号括起来的命令执行结果赋给指定变量
.
注释(#)功能:shell将#看作注释符号,忽略#后的字符
shell变量(shell变量没有存储类和类型的限制可以使用时“边定义,边使用”)
变量是脚本编程中如何进行数据表现的方法。
变量是表示计算机内存中保存的一种数据需要占的一个位置或一组位置的标识。
变量名可以由数字,字符和下划线组成,但是变量名只能由字符和下划线开头,而不能是数字。
shell
变量种类:
系统变量
:主要在判断命令参数和命令执行后的返回值时用到。
环境变量
:在程序运行时需要设置的变量。
用户变量
:局部变量由用户定义,用户可以定义、修改或删除他们。
shell变量:
用户定义的变量
变量名命令规则
以字母或下划线开头
由字母、数字、下划线组成
变量名区分大小写
变量赋值
格式
变量名=字符串
注意:
赋值号两边不能有空格
在赋给变量的值中含有空格、制表符或换行符,应该用双引号把这个字符串括起来。
引用变量值
访问
shell
变量的值,必须在变量名前面加
$
符号。
环境变量
可用env命令查看系统定义的所有环境变量
HOME变量
登陆后,shell将用户主目录的完整路径赋给变量HOME。
LOGNAME
注册名
PATH变量
输入命令的时候LINUX会去查找PATH里面记录的路径,冒号间隔各个目录
shell查找命令时,如果在标准目录中找不到,就会到PATH所设置的用户目录中查找。
PS1
变量
shell
的主提示符。
PWD
变量
当前工作目录的路径
SHELL
变量
设置用户登陆
shell
的完整路径
TERM
变量
设置用户终端类型
显示和清除变量
输入
/
输出命令
read命令
利用
read
命令从键盘上读取数据,然后赋给指定的变量,可以
交互式
的为变量赋值。
格式
read
变量
1
变量
2
。。。
说明:
变量个数与给定数据个数相同,则依次对应赋值。
变量个数少于数据个数,则从左至右对应赋值,
最后一个变量被赋予剩余的所有数据
。
变量个数多于数据个数,则从左至右对应赋值,最后多余的变量不被赋值。
echo
命令
:
使用
echo
命令可以显示文本行或变量,或者把字符串输入到文件。
echo
命令有很多功能,其中最常用的是下面几个:
\c
不换行。
\f
进纸。
\t
跳格。
\n
换行。
-n
禁止换行
-e
解释转义字符
命令行参数
命令行参数是用户键入命令后所跟的数据项,通常用空格分隔。
算术运算
如:a=10
b=5
echo $a 输出为10
echo $b 输出为5
echo $a+$b 输出为15
echo a+b 输出为a+b
b=5
echo $a 输出为10
echo $b 输出为5
echo $a+$b 输出为15
echo a+b 输出为a+b
let c=a+b
echo $c 输出为15
echo $c 输出为15
expr命令(该命令提供算术运算功能,并能对数字或非数字字符串进行计算。)
为shell脚本添加控制结构
if语句
if…then…fi控制结构
if [ condition ]
then
commands
…
fi
if…then…fi控制结构
if [ condition ]
then
commands
…
fi
If…then…else控制结构
if [ condition ]
then
true - commands
else
false - commands
fi
If…then…elif控制结构
then
true - commands
else
false - commands
fi
If…then…elif控制结构
if [ condition_1 ]
then
commands_1
elif [ condition_2 ]
then
commands_2
…
else
commands_n
fi
条件测试
test语句
then
commands_1
elif [ condition_2 ]
then
commands_2
…
else
commands_n
fi
条件测试
test语句
test是shell内部命令,它计算参数表达式的值为真还是为假。
如果表达式为真,test返回0,
否则,返回非0值。
循环结构
while控制结构
如果表达式为真,test返回0,
否则,返回非0值。
循环结构
while控制结构
while [ condition ]
do
commands
done
util控制结构
do
commands
done
util控制结构
until [ condition ]
do
commands
done
for…in控制结构
do
commands
done
for…in控制结构
for variable in list - of - values
do
commands
done
for控制结构
do
commands
done
for控制结构
for ((条件1; 条件2; 条件3))
do
命令表
done
break与continue
do
命令表
done
break与continue
break可以结束整个循环,接着执行break之后的语句。
continue命令可以结束当次循环然后转入循环控制条件开始一次全新的循环。
continue命令可以结束当次循环然后转入循环控制条件开始一次全新的循环。
case语句
case 字符串 in
模式字符串1) 命令;;
模式字符串2) 命令;;
模式字符串n) 命令;;
esac
模式字符串1) 命令;;
模式字符串2) 命令;;
模式字符串n) 命令;;
esac
注:case语句以case关键字开头,以esca结束
每个模式字符串后可以跟多条命令,其最后一条必须以两个分号(;;)结束
各个模式字符串应唯一,不应重复出现
可以用(*)作为最后一个模式字符串,可以匹配任何情况
每个模式字符串后可以跟多条命令,其最后一条必须以两个分号(;;)结束
各个模式字符串应唯一,不应重复出现
可以用(*)作为最后一个模式字符串,可以匹配任何情况