基本用法
在opt/202~/下mkdir learn20~
cd learn20~/ 并vim learn01.sh
在learn01.sh中,开头即为#/bin/bash(是解释器)
输出为echo""
执行为sh learn01.sh
./learn01.sh
例:
#/bin/bash
echo "hello learn shell!"
#变量
var='Test learn!'
#输出
echo $var
#则输出结果为hello learn shell!
Test learn!
若为echo $vartest 则其本身就是一个变量,
若为echo ${var}test 则输出,Test learn!test
学习shell中的$含义
vatest0=$0
vatest1=$1
vatest2=$2
vatest3=$3
vatest4=$4
vatest5=$5
vatest6=$? 输出结果为运行命令的结束代码
vatest7=$! 输出结果为运行后台的PID
vatest8=$- 输出结果为使用Set命令设定的flag 一览
vatest9=$$ 输出结果为PID
vatest10=$* 输出结果为参数列表
vatest11=$# 输出结果为参数个数
vatest12=$@
echo 'vatest0='${vatest0}
echo 'vatest1='${vatest1}
echo 'vatest2='${vatest2}
echo 'vatest3='${vatest3}
echo 'vatest4='${vatest4}
echo 'vatest5='${vatest5}
echo 'vatest6='${vatest6}
echo 'vatest7='${vatest7}
echo 'vatest8='${vatest8}
echo 'vatest9='${vatest9}
echo 'vatest10='${vatest10}
echo 'vatest11='${vatest11}
echo 'vatest12='${vatest12}
执行命令为:./learn01.sh a b c d e f
则结果为
vatest0=
vatest1=a
vatest2=b
vatest3=c
vatest4=d
vatest5=e
vatest6=$?
vatest7=$!
vatest8=hB
vatest9=22727
vatest10=a b c d e f
vatest11='6
vatest12=a b c d e f
执行命令,只要成功,
则echo $?
命令结果为0,否则为其他数字
写shell脚本的目的
1、人为操作出错
2、操作方法重复
3、Devops
shell脚本解决的问题有
1、减少出错
2、解放人力
3、节省时间
4、向devops/自动化靠拢
发布脚本:
搭建测试环境-----docker
(可在目录下直接输入docker,无错即有此命令)
启动docker命令 service docker start
ps -ef |grep docker查看docker是否启动
1、操作环境linux
2、语言环境java
3、svn代码管理 文件版本管理
4、中间件应用服务器 tomcat
xmapp
a-apache
m-MariaDB/mysql
p-PHP
p-Perl
war包发布过程(前提测试环境已搭建完成:发布war包)
1、获取新代码、更改本地代码
2、更改环境配置
3、编译
4、打包
5、停服务
6、放入指定应用服务器中
7、启动服务
jar包发布过程(前提测试环境已搭建完成)
1、获取新代码、更改本地代码
2、更改环境配置
3、编译
4、打包 jar
5、停服务
6、放入指定应用服务器中
7、启动服务
更改之前制作的脚步
可将常用目录地址或IP地址编写为变量,然后用${}命令使用
eg:Rsourcecode=/opt/20230525/newcode
使用:cd ${Rsourcecode}
由于每次的脚本可能保存或修改位置不一,名字不一,使用此方法可极大减少错误率和工作量
若要把时间作为文件名,则
timestr=$(date +%Y%m%d%H%M%S)
在脚本制作过程中,需要判断,
常用判断词汇有
if else if
While
For
Loop
创建文本commonfuncion.sh(开头必写#!/bin/bash)
Chmod 755 $1
保存
使用方法:sh commonfuncion.sh 需加权限的文件名
创建新文件learn001.sh
#/bin/bash
#创建变量
var1=$1
var2=$2
#关系成立,即结果为true 否之Flase
#相等 = -eq
#不等 != -ne
#大于 -gt
#小于 -lt
#大于等于 -ge
#小于等于 -le
echo "【1】------------------------------------------"
if [ ${var1} -eq ${var2} ]
then
echo “var1:${var1} = var2:${var2}”
else
echo “var1:${var1} != var2:${var2}”
fi
echo “【2】..........................................”
if [ ${var1} -eq ${var2} ]
then
echo “【var1】:${var1} == 【var2】:${var2}”
elif [ ${var1} -gt ${var2} ]
then
echo “【var1】:${var1} 》 【var2】:${var2} --左边大于右边”
elif [ ${var1} -lt ${var2} ]
then
echo “【var1】:${var1} 《 【var2】:${var2} --左边小于右边”
else
echo “不成立的比较”
fi
echo “【3】..........................................”
if [ ${var1} -eq ${var2} ]
then
echo “【var1】:${var1} == 【var2】:${var2}”
elif [ ${var1} -ge ${var2} ]
then
echo “【var1】:${var1} 》= 【var2】:${var2} --左边大于右边”
elif [ ${var1} -le ${var2} ]
then
echo “【var1】:${var1} 《= 【var2】:${var2} --左边小于右边”
else
echo “不成立的比较”
fi
创建文本learn02.sh(开头必写#!/bin/bash)
学习布尔运算
#!/bin/bash
#学习布尔运算
#创建变量
var1=$1
var2=$2
#布尔运算
#与 -a 一假全假
#或 -0 一真全真
#非 !真为假,假为真
:<<EOF
echo “与的运算”
if [ ${var1} -gt ${var2} -a ${var1}=100 ]
then
echo “var1:${var1} 大于 var2:${var2} 并且等于100”
elif [ ${var1} -lt ${var2} -a ${var1}=100 ]
then
echo “var1:${var1} 小于 var2:${var2} 并且等于100”
else
echo var1 不等于100
fi
EOF
:<<EOF
echo “或的运算”
if [ ${var1} -gt ${var2} -o ${var1}=100 ]
then
echo “var1:${var1} 大于 var2:${var2} 并且等于100”
elif [ ${var1} -lt ${var2} -o ${var1}=100 ]
then
echo “var1:${var1} 小于 var2:${var2} 并且等于100”
else
echo var1 不等于100
fi
EOF
echo “非的运算”
if [ ! ${var1} -gt ${var2} ]
then
echo “var1:${var1} -lt var2:${var2}”
else
echo “var1:${var1} -gt var2:${var2}”
fi
创建文本learn03.sh(开头必写#!/bin/bash)
学习逻辑运算
#!/bin/bash
#学习逻辑运算
#创建变量
var=$1
var1=$2
#逻辑运算
#逻辑and &&
#逻辑or ||
:<<EOF
echo “逻辑或运算”
if [[ ${var} -le ${var1} || $3 != “ok” ]]
then
echo “左边var的值${var}小于等于右边var1的值${var1} 或var不等于ok”
elif [[ ${var} -le ${var1} || $3 = “ok” ]]
then
echo “左边var的值${var}小于等于右边var1的值${var1} 或var等于ok”
else
echo “左边var的值${var}大于等于右边var1的值${var1}”
fi
EOF
echo “逻辑与运算”
if [[ ${var} -le ${var1} && $3 != “ok” ]]
then
echo “左边var的值${var}小于等于右边var1的值${var1} 且var不等于ok”
elif [[ ${var} -le ${var1} && $3 = “ok” ]]
then
echo “左边var的值${var}小于等于右边var1的值${var1} 且var等于ok”
else
echo “左边var的值${var}大于等于右边var1的值${var1}”
fi
创建文本learn04.sh(开头必写#!/bin/bash)
学习字符串的运算
#!/bin/bash
#学习字符串的运算
#创建变量
var1=$1
var2=$2
#字符串的运算
#等于=
#不等于!=
#检查长度 -z 字符串长度为0 返回true;-n 字符串长度不为0 返回true;
#检查空 $ 不为空返回true
:<<EOF
echo “字符串的运算:相等”
if [ $1 = $2 ]
then
echo “$1等于$2,结果为true”
else
echo “$1不等于$2,结果为flase”
fi
EOF
:<<EOF
echo “字符串的运算:不相等”
if [ $1 != $2 ]
then
echo “$1不等于$2,结果为true”
else
echo “$1等于$2,结果为flase”
fi
EOF
:<<EOF
echo “检查长度 -z 字符串长度为0 返回true”
if [ -z $1 ]
then
echo “$1长度为0,结果为true”
else
echo “$1长度不为0,结果为flase”
fi
EOF
:<<EOF
echo “检查长度 -n 字符串长度不为0 返回true”
if [ -n "$1" ]
then
echo “$1长度不为0,结果为true”
else
echo “$1长度为0,结果为flase”
fi
EOF
echo “检查空 $ 不为空返回true”
if [ $1 ]
then
echo “$1不为空,结果为true”
else
echo “$1为空,结果为flase”
fi
创建文本learn05.sh(开头必写#!/bin/bash)
学习文件测试运算
#!/bin/bash)
#学习文件测试运算
#文件测试运算
#是否为目录 -d
#是否为文件-f
#是否可读 -w
#是否可写-r
#是否可执行-x
#文件是否为空 -s
#文件是否存在包含目录 -e
path=$1
:<<EOF
echo "#是否为目录 -d"
if [ -d ${path} ]
then
echo “$path是一个目录”
else
echo “$path不是一个目录”
fi
EOF
:<<EOF
echo "#是否为文件-f"
if [ -f ${path} ]
then
echo “$path是一个文件”
else
echo “$path不是一个文件”
fi
EOF
echo "是否可读 -w"
if [ -w ${path} ]
then
echo “$path可读”
else
echo “$path不可读”
fi
echo "是否可写 -r"
if [ -r ${path} ]
then
echo “$path可写”
else
echo “$path不可写”
fi
echo "是否可执行 -x"
if [ -x ${path} ]
then
echo “$path可执行”
else
echo “$path不可执行”
fi
echo "文件是否为空 -s"
if [ -s ${path} ]
then
echo “$path为空”
else
echo “$path不为空”
fi
echo "文件是否存在包含目录 -e"
if [ -e ${path} ]
then
echo “$path存在目录”
else
echo “$path不存在目录”
fi
创建文本learn06.sh(开头必写#!/bin/bash)
学习字符串for运算
#!/bin/bash)
#学习字符串for运算
list=$*
for i in ${list[*]}
do
echo ${i}
done