SHELL语法学习

文章介绍了Shell脚本的基本用法,包括创建脚本、设置解释器、变量使用以及特殊符号的含义。通过示例展示了如何在脚本中处理参数、进行条件判断和逻辑运算。此外,还讨论了Shell脚本在自动化任务、如Docker环境搭建、war和jar包发布过程中的应用,以及如何通过编写脚本来减少错误、提高效率和实现DevOps目标。
摘要由CSDN通过智能技术生成

基本用法

在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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值