shell的脚本的基本操作

本文围绕Linux和Shell展开,介绍了获取文件路径、后台运行、日志输出等操作。如获取文件路径后执行start.sh文件,后台运行在命令行末加&,日志输出可重定向。还提及基本脚本创建、maven项目迁移到Linux及一些Linux小命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、获取文件路径

文件的路径:/home/hadoop/apps/clientCanal/bin/start.sh

执行start.sh文件

./start.sh

 以下是start.sh的文件内容

#!/bin/bash

project_path=$(cd `dirname $0`; pwd)
echo $project_path

project_name="${project_path##*/}"
echo $project_name

project=$(dirname $(pwd))
echo $project

name="${project##*/}"
echo $name

输出结果是:

/home/hadoop/apps/clientCanal/bin
bin
/home/hadoop/apps/clientCanal
clientCanal

 

2、后台运行

只要在命令行的最后加上  &

例如:java -jar Test &

 

3、日志输出

日志输出重定向命令,如 cmd > out.log &
Linux默认定义两个变量:1和2;
1表示标准输出
2表示错误输出
如 cmd 1>info.log 2>error.log &              (标准输出到info.log      错误输出到error.log)                                                                       如果想输出到一个文件:cmd 1>info.log 2>&1 &

 

4、基本脚本

#!/bin/bash
case "`uname`" in
    Linux)
                bin_abs_path=$(readlink -f $(dirname $0))
                ;;
        *)
                bin_abs_path=`cd $(dirname $0); pwd`
                ;;
esac
project_abs_path=`cd ${bin_abs_path}/.. ;pwd`

config_abs_path=$project_abs_path"/conf"

libs_abs_path=$project_abs_path"/libs"

logs_abs_path=$project_abs_path"/logs"


echo 'conf ---->'$config_abs_path
echo 'libs ---->'$libs_abs_path
echo 'logs ---->'$logs_abs_path

JARS="" #存放所有jar的路径
jar=".jar" #匹配jar

for file in `ls $libs_abs_path`
do
 if [[ $file == *$jar ]]
 then
    JARS=$JARS$libs_abs_path$file" "
    CLASSPATH=$i:"$CLASSPATH";
 else
    echo "libs文件夹里面有非jar文件"
fi
done

CLASSPATH="$config_abs_path:$CLASSPATH";

echo $CLASSPATH


JAVA="" #存放java的路径
if [ -z "$JAVA" ] ; then
  JAVA=$(which java)
fi
echo $JAVA

#创建日志文件
if [ ! -f $logs_abs_path/app.log ] ; then
        touch $logs_abs_path/app.log
fi

str=`file -L $JAVA | grep 64-bit`
if [ -n "$str" ]; then
        JAVA_OPTS="-server -Xms2048m -Xmx3072m"
else
        JAVA_OPTS="-server -Xms1024m -Xmx1024m"
fi

JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=250 -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+PrintAdaptiveSizePolicy -XX:+PrintTenuringDistribution"
JAVA_OPTS=" $JAVA_OPTS -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8"
APP_OPTS="-DappName=AppName"


#执行jar包
$JAVA $JAVA_OPTS $APP_OPTS -classpath .:$CLASSPATH App 1>$logs_abs_path/app.log 2>&1
echo $! > $project_abs_path/bin/app.pid

创建脚本:         touch yourFileName.sh

更改文件可执行:chmod +x yourFileName.sh                         

编辑脚本:vi yourFileName.sh

解释:

  • project_abs_path项目的目录,
  • CLASSPATH指定加载的类
  • CLASSPATH后面加了一个config目录,是类似于指定resources的作用

执行这个脚本:sh yourFileName.sh &

5、maven项目到Linux

参考GitHub:maven打tar.gz包

6、Linux的一些小命令

  • 取A和B之间的字符串,例如:applist = adf fda dsaf A dfasd B asdf asdf asdf fda df  执行之后是:dfasd 
applist = 'adf fda dsaf A dfasd B asdf asdf asdf fda df'
echo $applist  | awk -v head="A" -v tail="B" '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值