1.shell:是一种脚本语言或命令行解释器,用来操作一些程序
2.脚本的要求:
- 以#!/bin/bash开头
- 脚本要有执行权限
3.入门
1.vi first.sh
echo "hello"
2.授权:chmod 744 first.sh
3.执行./first.sh或绝对路径执行:/root/shell/first.sh
4.如果不授权:sh ./first.sh
4.shell变量
$PATH $USER是系统变量 是取一个变量的值自定义变量:变量名=变量值,撤销变量unset变量名,声明静态变量readonly变量但不能unset撤销显示shell所有变量用set在引用变量或输出时用是取一个变量的值
自定义变量:变量名=变量值,撤销变量 unset 变量名,声明静态变量readonly 变量 但不能unset撤销
显示shell所有变量用set
在引用变量或输出时用是取一个变量的值自定义变量:变量名=变量值,撤销变量unset变量名,声明静态变量readonly变量但不能unset撤销显示shell所有变量用set在引用变量或输出时用修饰
#定义变量a
a=86
#在引用变量或输出时用$
echo "a=$a"
变量也可以提升到全局环境变量,供其他shell程序使用
#定义环境变量
TOMCAT_HOME=/shell/tomcat
#设置环境变量,供外部使用
export TOMCAT_HOME
source /etc/profile让资源立即生效
echo $TOMCAT_HOME输出
在shell中使用
echo $TOMCAT_HOME
5.变量定义的规则:
名称由字母 数字 下划线组成 但不能以数字开头
等号两侧不能由空格
一般字母大写
6.将返回值赋给变量
date=date
echo date∗d=date
*d=date∗d=(date)*
echo $d
7.单行注释:#多行注释: :<<! !
8.在执行shell脚本时传递参数:如 ./test.sh 100 200(100,200会传递到shell脚本中)
$n:n为数字,$0代表命令,$1代表100,一次类推到$9,如果大于10则为${10}
$*会把100 200当作一个整体
$@
$#标识参数个数
eg:
#!/bin/bash
#获取参数
echo "参数值:$0 $1 $2"
echo "参数整体:$*"
echo "$@"分开遍历
echo "参数个数:$#"
输出:
参数值:./test.sh 1 2
参数整体:1 2
1 2
参数个数:2
9.预定义变量:可以直接在shell中使用
$$:当前的进程号pid
$!:最后一个进程号pid
$?:最后一次执行命令的状态,0代表正确,非0不正确
eg:
echo "当前进程号=$$"
#后台运行first.sh
./first.sh &
echo "最新进程号=$!"
echo "结果:$?"
输出:
当前进程号=17044
最新进程号=17045
结果:0
10.运算符:
“(())或者(())或者(())或者[ ]”
expr m+n(* / %乘 除 取余)
#(1+2)x3
echo "(1+2)x3=$(((1+2)*3))"
echo ""
echo "(1+2)x3=$[(1+2)*3]"
echo ""
**TEMP=`expr 1 + 2`
RES=`expr $TEMP \* 3`
echo "(1+2)x3=$RES"注意空格**
11.条件判断:
格式:
[ condition ]:前后有空格 condition非空返回true,空为false
[ condition ] && echo ok || echo nok
常用判断:比较数的大小,判断文件权限,判断文件类型 符号含义自行百度
eg:


12.if判断
if [ 条件];
then 执行
fi
或者
if [ 条件 ]
then 执行
elif [ 条件 ]
then 执行
fi
eg:
#输入参数>=60 及格 否则不及格
if [ $1 -ge 60 ]
then
echo "及格"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
case判断:
case $变量名 in
“1”)
变量值为1,执行
;;
“2”)
变量值为2,执行
;;
esac
eg:
#输入参数1为星期1 2为星期2 其余为other
case $1 in
"1")
echo "星期一"
;;
"2")
echo "星期二"
;;
*)
echo "other"
;;
esac
for循环:
语法1:
for 变量 in 值1 值2 值3
do
逻辑
done
eg:
#遍历输入参数
for i in "$*"
do
echo "$i"
done
语法2:
for((初始值;循环条件;变化值))
do
逻辑
done
eg:
#1+100的值
sum=0
for((i=1;i<=100;i++))
do
sum=$[$sum+$i]
done
echo "$sum"
while循环:
语法:
while [ 条件 ]
do
程序
done
eg:
#!/bin/bash
#1+..+n的值
sum=0
i=0
while [ $i -le $1 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo "$sum"
read读取控制台输入
eg:
#读取控制台输入的参数
#程序阻塞 输入的值赋给num
read -p "请输入参数:" num
echo "输入了:$num"
read -t 10//10秒内输入,10后跳走
13函数
系统函数:
basename:用于返回完整路径最后的/的部分 用于获取文件名
basename pathname suffix/basename string suffix 如果指定了suffix会把文件的后缀名去掉
eg:
#返回/shell/first.sh文件
basename /shell/first.sh
dirname:用于返回完整路径最后的/的前边部分 用于获取文件名
eg:
dirname /shell/first.sh
自定义函数:
语法:
function 函数名() //不用写形参
{
代码
return
}
调用: 函数名
eg:
#函数处理值
function getSum(){
SUM=$[$n1+$n2]
echo "$SUM"
}
read -p "参数1:" n1
read -p "参数2:" n2
#调用函数
getSum $n1 $n2
14.综合案列:
①每天00:00备份数据库②开始结束给提示③备份时间为文件名.tar.gz④检查是否有10天的数据有删除