Shell脚本

Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson的sh是第一种Unix Shell,Windows Explorer是一个典型的图形界面Shell。

菜鸟教程shell手册:https://www.runoob.com/linux/linux-shell.html

入门

shell脚本shell script,是一种为shell而编写的脚本程序。然而通常所说的shell却是指shell脚本,而非shell本身。
Linux系统shell种类众多,常用的有sh和bash。

第一个shell脚本

shell脚本用#!/bin/bash或#!/bin/sh之类的方式,制定运行脚本的shell,#!是识别符号。

#!/bin/bash
echo "Hello World !"

在这里插入图片描述

运行shell脚本的方法:

将shell文本保存为.sh格式文件,赋予执行权限
1.chmod +x ./test.sh # 赋予可执行权限
2…/test.sh #执行脚本,注意此处需要指明当前目录下的test.sh哦,不然会去path路径找的。
在这里插入图片描述

变量

使用变量

your_variable='yuyang'
echo $your_variable
echo ${your_variable}

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

在这里插入图片描述

只读变量

#!/bin/bash
myUrl="http://www.w3cschool.cc"
readonly myUrl
myUrl="new url" #此处就会报错,因为变量只读了。

删除变量

unset variable_name
#!/bin/sh
myUrl="http://www.google.com"
unset myUrl
echo $myUrl #此时输出就没接过了,因为变量被删除了。

变量类型

运行shell时,会同时存在三种变量:

  • 局部变量:脚本中定义的变量,仅作用于本shell脚本内。
  • 环境变量:所有程序,包括shell启动程序都能访问的环境变量。
  • shell变量:shell程序的特殊变量。

数组

  • 定义数组
    shell中使用()表示数组,元素用空格来分割。
#!/bin/bash

# 一对括号表示是数组,数组元素用“空格”符号分割开。
a=(1 2 3 4 5 )

# 用${#数组名[@或*]} 可以得到数组长度
echo ${#a[@]}
echo ${#a[*]}

# 用${数组名[@或*]} 可以得到整个数组内容
echo ${a[@]}
echo ${a[*]}

# 用${数组名[下标]} 可以得到指定下标的值,下标是从0>开始
echo ${a[2]}

###### 赋值 ######
echo "赋值"
a=(1 2 3 4 5)

# 直接通过 数组名[下标] 就可以对其进行引用赋值
a[1]=100

# 如果下标不存在,自动添加新一个数组元素
a[1000]=1000

# 用${#数组名[@或*]} 可以得到数组长度
echo ${#a[@]}
echo ${#a[*]}

###### 删除 ######
echo "删除"
# unset 数组[下标] 不带下标,清除整个数据。
unset a

###### 截取 ######
echo "截取"

# 截取数组 ${数组名[@或*]:起始位置:长度},从下标0开>始,截取长度为3,切片原先数组,返回是字符串,中间用“空格”分开
echo ${a[@]:0:3}
echo ${a[*]}

# 如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。
c=(${a[@]:1:4})
echo ${c[*]}
echo ${#c[*]}

###### 替换 ######
echo "替换"
a=(1 2 3 4 5)

# ${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。
echo ${a[@]/3/100}   #1 2 100 4 5
echo ${a[@]}        # 1 2 3 4 5   

# 如果需要修改,重新赋值给变量a
a=(${a[@]/3/100})
echo ${a[@]}  # 1 2 100 4 5

运算符

#!/bin/bash

# 打印终端命令行的所有参数
echo $*;

# 打印终端命令行的所有参数的个数
echo $#;

# 如果终端命令行的所有参数的个数小于3,就输出所有参数
if [ $# -lt 3 ]; then
    echo $*;
else
    echo $0;
    echo "参数过多不在控制台显示";
fi

#-eq	检测两个数是否相等,相等返回 true。	[ $a -eq $b ] 返回 false。
#-ne	检测两个数是否不相等,不相等返回 true。	[ $a -ne $b ] 返回 true。
#-gt	检测左边的数是否大于右边的,如果是,则返回 true。	[ $a -gt $b ] 返回 false。
#-lt	检测左边的数是否小于右边的,如果是,则返回 true。	[ $a -lt $b ] 返回 true。
#-ge	检测左边的数是否大于等于右边的,如果是,则返回 true。	[ $a -ge $b ] 返回 false。
#-le	检测左边的数是否小于等于右边的,如果是,则返回 true。	[ $a -le $b ] 返回 true。

#  !	非运算,表达式为 true 则返回 false,否则返回 true。	[ ! false ] 返回 true。

#  &&	逻辑的 AND	[[ $a -lt 100 && $b -gt 100 ]] 返回 false
#  ||	逻辑的 OR	[[ $a -lt 100 || $b -gt 100 ]] 返回 true

启动指令

./脚本名   参数

在这里插入图片描述
$0为执行文件名

循环

#!/bin/bash

###### while循环例子1 ######
echo "while循环例子1";

i=10;
while [[ $i -gt 5 ]]; do
    echo $i;
    ((i--));
done;

###### while循环例子2 ######
echo "while循环例子2";

# 循环读取/etc/hosts文件内容
while read line; do
    echo $line;
done < /etc/hosts;

###### for循环例子1 ######
echo "for循环例子1";
for((i=1;i<=10;i++)); do
    echo $i;
done;

###### for循环例子2 ######
echo "for循环例子2";

# seq 10 产生 1 2 3 。。。。10空格分隔字符串。
for i in $(seq 10); do
    echo $i;
done;

###### for循环例子3 ######
echo "for循环例子3";

# 根据终端输入的文件名来检查当前目录该文件是否存在
for file in $*; do      #  $*  传参
    if [ -f "$file" ]; then
        echo "INFO: $file exists"
    else
        echo "ERROR: $file not exists"
    fi
done;

###### until循环例子1 ######
echo "until循环例子1";

a=10;
until [[ $a -lt 0 ]]; do
    echo $a;
    ((a--));
done;

在这里插入图片描述

Case 选择器

在这里插入图片描述

#!/bin/bash
case $1 in
    start | begin)
        echo "start something"  
    ;;
    stop | end)
        echo "stop something"  
    ;;
    *)
        echo "Ignorant"  
    ;;
esac

Select

相当于scanner
在这里插入图片描述

#!/bin/bash

select ch in "begin" "end" "exit"; do
    case $ch in
        "begin")
            echo "start something"  
        ;;
        "end")
            echo "stop something"  
        ;;
        "exit")
            echo "exit"  
            break;
        ;;
        *)
            echo "Ignorant"  
        ;;
    esac
done;

函数 function

#!/bin/bash

###### 函数定义 ######
echo "函数定义";

# 注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
function hello() {
    echo "Hello!";
}

function hello_param() {
    echo "Hello $1 !";
}
###### 函数调用 ######
# 函数调用
echo "函数调用";
hello;

###### 参数传递 ######
echo "函数传参调用";
hello_param ben;

###### 函数文件 ######
echo "函数文件调用";
# 调用(包含)函数文件,点和demo_call之间有个空格
. demo_call.sh;
# 调用函数
callFunction ben;

###### 载入和删除 ######
echo "载入和删除";

# 用unset functionname 取消载入
# unset callFunction;
# 因为已经取消载入,所以会出错
# callFunction ben;

###### 参数读取 ######
echo "参数读取";

# 参数读取的方式和终端读取参数的方式一样
# 注意:$10不能获取第10个参数,因为当n>=10时候,要用${n}来获取参数。
funWithParam(){
    echo "The value of the first parameter is $1 !"
    echo "The value of the second parameter is $2 !"
    echo "The value of the tenth parameter is $10 !"
    echo "The value of the tenth parameter is ${10} !"
    echo "The value of the eleventh parameter is ${11} !"
    echo "The amount of the parameters is $# !"
    echo "The string of the parameters is $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

###### 函数return ######
echo "函数return";

funWithReturn(){
    echo "The function is to get the sum of two numbers..."
    echo -n "Input first number: "
    read aNum
    echo -n "Input another number: "
    read anotherNum
    echo "The two numbers are $aNum and $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
# 函数返回值在调用该函数后通过 $? 来获得
echo "The sum of two numbers is $? !"

在这里插入图片描述

部署脚本

deploy.sh

 #!/bin/sh

war=$1
bin=$(cd `dirname $0`; pwd)

if [ ! -n "${war}" ]; then
   echo "***Usage: $0 [project.war]"
   exit 0
fi
if [ ! -f "${war}" ]; then
    echo "***Error: ${war} does not exist."
    exit 0
fi
if [ ! "${war##*.}" = "war" ]; then
    echo "***Error: ${war} is not a war file."
    exit 0
fi

echo "Deploy ${war##*/}..."
rm -rf ${bin}/../webapps/ROOT/ && unzip -qo ${war} -d ${bin}/../webapps/ROOT/
rm -rf ${bin}/../work/Catalina/localhost/
echo "Restart tomcat..."
exec ${bin}/restart.sh

执行

./deploy.sh  war包位置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值