Shell学习笔记

一、变量操作

以下灰色字体为说明文字不包括在代码里

获取字符串长度:#[字符串对象]
截取部分字符串:[字符串对象]:[索引]:[截取个数]
引用变量:$[变量名称]${[变量名称]}
根据索引查找数组:${[数组名]:[索引]}
获取数组所有元素:${[数组名]:[@]}${[数组名]:[*]}
打印:echo [打印对象]

代码如下:

#!/bin/bash
# 变量
str="hello world !"
str2="${str} I am fine"
str3="123"
arr=(1 222 3 4 5 6)
echo "1、 ${#str3}" # 输出str3的长度
echo "2、${str2}" # str和str2拼接结果
echo "3、${str:0:5}" # 从str的第一个字符开始截取5个字符
echo "4、`expr index "${str}" "hello"`" # 查找字符串hello首次出现的位置
echo "5、${arr[2]}" # 输出arr数组中索引为2的值
echo "6、${arr[@]}" # 获取数组中所有元素
echo "7、${arr[*]}" # 获取数组中所有元素
# 获取数组长度
echo "8、arr_length: ${#arr[@]}"
echo "9、arr_length: ${#arr[*]}"
echo "10、arr_value_length: ${#arr[1]}" # 获取索引为1的值的长度

输出结果:

1、 3
2、hello world ! I am fine
3、hello
4、1
5、3
6、1 222 3 4 5 6
7、1 222 3 4 5 6
8、arr_length: 6
9、arr_length: 6
10、arr_value_length: 3

二、文本注释

:<<EOF
      [文本内容]
EOF
:<<'
       [文本内容]
'
:<<!
       [文本内容]
!

三、传递参数

代码如下:

#!/bin/bash
echo "1、执行脚本:$0";
echo "2、参数1: $1";
echo "3、参数2: $2";
echo "4、参数个数:$#";
echo "5、$*" # 显示所有参数
echo "6、\"$@\"" # 显示所有参数
echo "7、当前进程ID号:$$"
echo "8、最后一个进程ID号:$!"
echo "9、显示shell使用的当前选项:$-"
echo "10、退出状态:$?" # 0:没有错误 >0:有错误

执行命令:

chmod +x test.sh  # 给命令授权
./test.sh 233 321  # 执行脚本及传参

输出结果:

1、执行脚本:./test.sh
2、参数1: 233
3、参数2: 321
4、参数个数:2
5、233 321
6、"233 321"
7、当前进程ID号:8269
8、最后一个进程ID号:
9、显示shell使用的当前选项:hB
10、退出状态:0

四、脚本

tar程序包运行脚本

#!/bin/bash
###############参数说明###############
#./app.sh start	启动应用
#./app.sh stop	关闭应用
#./app.sh restart	重启应用
#./app.sh status	查看应用状态
#./app.sh stop -f	强制kill应用进程
#####################################
appName=`ls|grep .jar$`
if [ -z $appName ]
then
    echo "Please check that this script and your jar-package is in the same directory!"
    exit 1
fi

killForceFlag=$2
##开始方法方法
function start()
{
    count=`ps -ef |grep java|grep $appName|wc -l`
    if [ $count != 0 ];then
        echo "Maybe $appName is running, please check it..."
    else
        echo "The $appName is starting..."
        nohup java -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms512M -Xmx4G -jar $appName > out.log 2>&1 &
    fi
}
##结束方法
function stop()
{
    appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`
    if [ -z $appId ]
    then
        echo "Maybe $appName not running, please check it..."
    else
        echo -n "The $appName is stopping..."
        if [ "$killForceFlag" == "-f" ]
        then 
            echo "by force"
            kill -9 $appId
        else
            echo
            kill $appId
        fi
    fi
}

function status()
{
    appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`
    if [ -z $appId ] 
    then
        echo -e "\033[31m Not running \033[0m" 
    else
        echo -e "\033[32m Running [$appId] \033[0m" 
    fi
}

function restart()
{
    stop
    for i in {3..1}
    do
        echo -n "$i "
        sleep 1
    done
    echo 0
    start
}

function usage()
{
    echo "Usage: $0 {start|stop|restart|status|stop -f}"
    echo "Example: $0 start"
    exit 1
}

case $1 in
    start)
    start;;

    stop)
    stop;;
    
    restart)
    restart;;
    
    status)
    status;;
    
    *)
    usage;;
esac
posted @ 2020-07-17 15:33  antguo  阅读(117)  评论(0编辑  收藏  举报