Shell语法
Shell是一个命令行解释器,他为用户提供一个向Linux内核发送请求以便于运行程序的界面系统级程序。
脚本格式要求
- 脚本以
#!/bin/bash
开头 - 脚本需要有可执行权限
执行sh文件时,需要有执行权限
chmod u+x ./hello.sh
./hell.sh # 可以执行成功
或者直接
sh ./hello.sh
Shell变量
Linux Shell中的变量分为,系统变量和用户自定义变量
系统变量:$HOME
,$PWD
,$SHELL
,$USER
定义shell变量
定义变量:变量名=值
撤销变量:unset 变量
声明静态变量:readonly
变量,不能unset
规则
- 变量名称可以由字母、下划线和数字组成,但是不能以数字开头。
- 等号两侧不能有空格
- 变量名称一般习惯为大写
A=$(date),将命令的返回值赋值给A
A=`date`,将命令的返回值赋值给A
设置环境变量
export 变量名=变量值
:将shell变量输出为环境变量/全局变量
source 配置文件
:将修改后的配置文件立即生效
echo $变量名
:查询环境变量的值
将环境变量写在/etc/profile
文件中
vim命令行模式:set nu
显示行号
# shell文件,多行注释语法
:<<!
多行注释内容
!
位置参数变量
执行shell脚本时,如果希望获取到命令行的参数信息,就可以使用位置参数变量
$n
:n为数字,$0
表示命令本身,$1
-$9
代表第一到第九个参数,十以上的参数需要用大括号包括如${11}
$*
:这个变量代表命令行所有的参数,$*把所有的参数看成一个整体
$@
:这个变量代表命令行所有的参数,$@把每个的参数区分对待
$#
:这个变量代表命令行中所有参数的个数
预定义变量
shell本身中定义好的变量
$$
:当前进程的进程号
$!
:后台运行的最后一个进程的进程号
$?
:最后一次执行的命令的返回状态。如果是0,则说明上一次命令正确执行;如果非0,则说明上一次命令执行不正确。
/root/shcode/text.sh &
:以后台的方式运行
运算符
三种写法:$((运算式))
或者$[运算式]
或者expr m + n
// 全称expression 表达式
推荐第二种
注意expr
运算符间要有空格,需要将expr
的结果赋值给某个变量,使用``
expr \*
,乘号需要加上\。
三种写法(2+3)*4
RE1=$(((2+3)*4))
RE2=$[(2+3)*4]
RE=`expr 2 + 3`
RE3=`expr $RE \* 4`
条件判断
判断语句
基本语法:[ condition ]
,注意condition前后有空格
常用判断条件
=
:判断字符串是否相等
两个整数比较
lt
:小于
le
:小于等于
eq
:等于
gt
:大于
ge
:大于等于
ne
:不等于
文件权限判断
-r
:读的权限
-w
:写的权限
-x
:执行的权限
文件类型判断
-f
:文件存在并且是一个常规的文件
-e
:文件存在
-d
:文件存在并且是一个目录
if判断
基本语法
if [ 条件判断式 ]
then
代码
fi
或者
if [ 条件判断式 ]
then
代码
else
代码
fi
或者多分支
if [ 条件判断式 ]
then
代码
elif
代码
fi
case语句
case $变量名 in
"值1")
代码
;;
"值2")
代码
;;
*)
代码
;;
esac
for循环
for 变量 in 值1 值2 值3
do
程序/代码
done
for(( 初始值;循环控制条件;变量变化))
do
程序/代码
done
while循环
while [ 条件判断式 ]
do
程序/代码
done
read读取控制台输入
read 选项 接受的变量
选项:
-p:指定读取时的提示符
-t:指定读取时等待的时间(秒)
例如:
read -p "请输入NUM1=" NUM1
echo $NUM1
read -t 10 -p "请在10秒内输入NUM2=" NUM2
echo $NUM2
函数
系统函数
basename
:返回完整路径最后/的部分,常用于获得文件名
basename [pathname] [suffix]
basename [string] [suffix]
suffix
为后缀,如果它被指定了,basename
会将pathname
或string
中的suffix
去掉
dirname
:返回完整路径最后/的前面的部分,常用于返回路径部分
dirname 文件的绝对路径
自定义函数
基本语法
[ function ] funname[()]
{
Action
[return int;]
}
调用函数,直接写函数名:funname [值]