Shell编程
Shell是什么
*******
Shell快速入门
脚本执行方式
脚本格式要求
脚本以#!/bin/bash开头
脚本需要有可执行权限
编写一个脚本 输出hello world
给定一个x权限 chmod 744 myShell.sh ./myShell.sh
或者用 sh myShell.sh执行 不推荐
Shell变量
1.shell变量分为系统变量和用户自定义变量
2.系统变量 $HOME $PWD $SHELL $USER 等等
3.显示当前shell中的所有变量 set
定义变量:变量=值
撤销变量:unset 变量
声明静态变量:readonly 变量, 注意:不能unset
将命令的结果返回赋值给变量
A=`ls -l` 反引号,Esc键下面的 运行里面的命令,并把结果返回给变量A
A=$(ls -l)
设置环境变量
基本语法
export 变量名=变量值 将shell变量输出为环境变量
source 配置文件 让修改后的配置信息立即生效
echo $变量名 查询环境变量的值
多行注释
:<<!
****
****
!
位置参数变量
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,
比如 /myShell.sh 100 200 这是一个执行shell的命令行 可以在myShell脚本中获取到参数信息
基本语法
$n n为数字 $0代表命令本身 $1-$9代表第一到第九个参数 十以上的参数用大括号包含 ${10}
$* 代表命令行中的所有参数 $*把所有参数看成一个整体
$@ 也是所有参数,不过$@把每个参数区分对待
$# 命令行中参数的个数
预定义变量
$$ 获取当前进程号PID
$! 后台运行的最后一个进程的进程号PID
$? 最后一次执行命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行 非0,则上一个命令执行不正确
运算符
基本语法
$((运算式))
$[运算式] 推荐使用
RESULT=`expr m + n`
expr \*,/,% 乘 除 取余
条件判断
基本语法
[ condition ] 注意 condition前后要有空格
非空返回true 可使用$?验证 (0为true >1为false)
[ atguigu ] 返回true
[] 返回false
[ condition ]&& echo OK || echo notok 条件满足,执行后面的语句
判断语句
两个整数的比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
按照文件权限进行判断
-w -r -x
按照文件类型进行判断
-f 文件存在并且是一个常规文件
-e 文件存在
-d 文件存在并且是一个目录
流程控制
if 判断
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi
case 语句
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
...省略其他分支...
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
for 循环
for 变量 in 值1 值2 值3 ...
do
程序
done
或者
for ((初始值;循环控制条件;变量变化))
do
程序
done
while 循环
while [ 条件判断式 ]
do
程序
done
read 读取控制台输入
read [选项] (参数)
选项
-p 指定读取值时的提示符
-t 指定读取值时等待的时间 如果没有指定的时间输入 则不等待
参数
变量:指定读取值的变量名
函数
系统函数
basename 返回完整路径最后/的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix]
basename /home/aaa/test.txt test.txt
basename /home/aaa/test.txt .txt test
dirname 返回完整路径最后/的 前面的部分,常用于返回路径部分
dirname /home/aaa/test.txt /home/aaa
自定义函数
[function] funname[()]
{
Action;
[return int;]
}