文章目录
shell是一个命令行解释,它为用户提供了一个向linux发送请求以便运行的程序,用户可以使用shell来启动、挂起、停止甚至是编写一些程序。
一.Shell基本要求
- 脚本以
#!/bin/bash
开头 - 脚本需要有可执行权限x
1.shell脚本的执行方式
- ./shell脚本的相对路径 或者 脚本文件绝对路径 (该方法需要可执行权限x)
- sh 绝对路径或相对路径 (该方法不需要可执行权限x)
2.shell中的变量
1.变量可以由字母、数字和下划线组成,但是不能以数字开头
2.给变量赋值时,等号两边不能有空格
3.变量名习惯用大写
3.将命令的结果赋给变量
A='date'
A='$(date)'
4.linux中的预定义变量
预定义变量就是shell中事先预定好的变量
$$
:当前1进程的进程号
$!
:后台运行的最后一个进程的进程号
$?
:最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令执行正确
5.位置参数变量
$n
:n为数字,$0代表命令本身,$1到
9
表
示
命
令
后
面
的
参
数
,
但
有
10
个
以
上
的
命
令
时
,
参
数
需
要
用
大
括
号
包
含
,
例
如
9表示命令后面的参数,但有10个以上的命令时,参数需要用大括号包含,例如
9表示命令后面的参数,但有10个以上的命令时,参数需要用大括号包含,例如{10}
$*
:这个变量代表命令行中所有的参数,$*
把所有的参数看成一个整体
$@
:这个变量也代表所有参数,但是并没有看成一个整体
$#
:表示参数的数量
6.设置环境变量
-
将shell变量输出为环境变量/局部变量 :
export 变量名=变量值
-
让修改后的配置信息立即生效 :
source 配置文件
-
查询环境变量的值:
echo $变量名
环境变量的设置应该在/etc/profile文件中进行设置,同时设置后要使用source命令使文件生效
7.shell中的运算符
- 基本语法:
$((运算式))
或$[运算式]
或expre m + n
//expression表达式
注意expre运算符间要有空格,如果希望将expr的结果赋给某个变量,则使用
''
或$()
,当然使用前两种则不需要这种方式
expr \*,/,% 乘、除、取余
8.条件判断表达式
- 基本语法:[ condition ] 注意condition前后要有空格,非空则返回true
[ condition ]&& echo ok || echo no
当condition为true时,执行&&后面的语句,否则执行||后的语句- 常用的条件表达式:
1.字符串比较:=
2.两个整数比较。小于:
-lt
;小于等于-le
;大于-gt
;大于等于’-ge’;等于-eq
;不等于-ne
。3.按照文件权限进行判断。有读的权限
-r
;有写的权限-w
;有执行的权限-x
。
[ -r /root/... ]
4.按照文件类型进行判断。文件存在并且是一个常规文件:
-f
;文件存在-e
;文件存在并且是一个目录:-d
;
9.流程控制
if语句
if[ 条件表达式 ]
then
执行的代码
elif[ 条件表达式 ]
then
执行的代码
fi
case语句
case $变量名 in
"值1" )
如果变量值为 值1,则执行该代码
;;
"值2" )
如果变量值为 值2,则执行改代码
;;
* )
如果都不满足,则执行该打吗
;;
esac
循环语句1
for 变量 in 值1 值2 值3
do
代码块
done
循环语句2
for(( 初始值;循环控制条件;循环变量 ))
do
代码块
done
循环语句3
while [ 条件表达式 ]
do
程序
done
当然在循环语句当中也是可以使用continue和break来进行循环控制的
10.函数
1.系统函数
basename
返回完整路径/
后的名字,常用于获取文件名
basename [path] [suffiex]
####dirname
返回完整路径最后/
前面的部分,常用于返回文件夹路径
dirname [文件绝对路径]
read
读取控制台输入
read (选项) (参数) 变量
-p
:指定读取值时的参数提示符
-t
:指定读取值时的等待时间,如果没有在指定时间内输入,就不再等待
1.自定义函数
#声明函数
function funName()
{
程序块
}
#调用函数
funName
如果我们要想函数中传递参数,使用$n
方式进行传递
function getSum()
{
A=$[ $1+$2 ]
echo $A
}
getSum 1 3