ubuntu 怎么使用shell脚本_ubuntu shell脚本怎么使用 - CSDN
精华内容
参与话题
  • 需求:将微服务部署到Ubuntu系统(服务器)上,以便用户使用,如果断电了,让其自动启动。!!! !!!!前者两个月前就OK了,后面这个自动启动足足折磨了我两天半!!!! 能从百度解决问题的都是带了一丝幸运与上帝...

    微服务:

    描述:首先微服务本身就是一个鲜明的分布式环境,eureka就是注册中心,其它服务要做的就是被eureka管理起来。

    需求:将微服务部署到Ubuntu系统(服务器)上,以便用户使用,如果断电了,让其自动启动。!!!

    !!!!前者两个月前就OK了,后面这个自动启动足足折磨了我两天半!!!!

    能从百度解决问题的都是带了一丝幸运与上帝的关照。而我这个问题百度的方法过了一遍,然而没有什么用!!!

    唉!!!不说了,一言难尽,奉献给你们解决办法,希望少走弯路,再一个也是让自己记住这个两天半。。。。。

    第一:

    将你的微服务各个服务打成jar包,直接丢到服务器某个目录下,最好建一个目录,例如我的:/jar

    截图如下:

    第二:

    写一个shell脚本,我linux基本不行,也没有刻意研究过,只能百度找个模板,自己改改能运行成功就OK了!

    脚本如下:

    #!/bin/bash
    
    #chkconfig: 2345 80 90
    #description:demo
    
    #程序代码数组
    APPS=(eureka	zuul	auth	resource	dispatching	 rsdata)
    
    #程序名称数组
    
    NAMES=(注册中心 网关 auth服务 resource服务 dispathing服务  rsdata服务)
    
    #jar包数组
    
    JARS=(eurekasvr-0.0.1-SNAPSHOT.jar zuulsvr-0.0.1-SNAPSHOT.jar auth-server-0.0.1-SNAPSHOT.jar resources-service-0.0.1-SNAPSHOT.jar dispatching-service-0.0.1-SNAPSHOT.jar rsdata-0.0.1-SNAPSHOT.jar)
    
    #jar包路径数组
    
    PATHS=(/jar/	/jar/	/jar/	/jar/	/jar/	/jar/)
    
    start(){
    local APPNAME=
    local NAME=
    local CLASSNAME=
    local PROJECTDIR=
    local command="sh demo.sh start"
    local cmd2="$1"
    local cmd2ok=0
    local cnt=0
    local okcnt=0
    #local C_PID="0"
    #for i in `seq 0 22`
    echo "---------------------------开始启动服务..."
    for(( i=0;i<${#APPS[@]};i++))
    do
    APPNAME=${APPS[$i]}
    NAME=${NAMES[$i]}
    CLASSNAME=${JARS[$i]}
    PROJECTDIR=${PATHS[$i]}
    if [ "$cmd2" == "all" ] || [ "$cmd2" == "$APPNAME" ]; then
    cmd2ok=1
    C_PID="0"
    cnt=0
    #ps -ef | grep "$CLASSNAME" | awk '{print $2}' | while read pid
    PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`	
    #do 
    #C_PID=$(ps --no-heading $pid | wc -l)
    #if [ "$C_PID" == "1" ]; then
    if [ -n "$PID" ]
    then
    echo "$APPNAME---$NAME:己经运行,PID=$PID"
    #okcnt=$(($okcnt+1))
    else
    cd $PROJECTDIR
    rm -f $PROJECTDIR/nohup.out
    command="nohup /usr/bin/java -jar $CLASSNAME"
    exec $command >> $PROJECTDIR/nohup.out &
    #ps -ef | grep "$CLASSNAME" | awk '{print $2}' | while read pid
    #do
    # C_PID=$(ps --no-heading $pid | wc -l)
    #done
    PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`	
    cnt=0
    #while (("$C_PID" == "0"))
    while [ -z "$PID" ]
    do
    if (($cnt==30))
    then
    echo "$APPNAME---$NAME:$cnt秒内未启动,请检查!"
    break
    fi
    cnt=$(($cnt+1))
    sleep 1s
    #ps -ef | grep "$CLASSNAME" | awk '{print $2}' | while read pid
    #do
    # C_PID=$(ps --no-heading $pid | wc -l)
    #done
    PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`	
    done
    okcnt=$(($okcnt+1))
    echo "$APPNAME---$NAME:己经成功启动,PID=$PID"
    #出借模块和总装模块启动较慢
    if [ "$APPNAME" == "deal" ] ;
    then
    echo "$APPNAME---$NAME:启动中..."
    sleep 30s
    fi	
    if [ "$APPNAME" == "dispatch" ] ;
    then
    echo "$APPNAME---$NAME:启动中..."
    sleep 10s
    fi
    fi 
    #done	
    fi
    done
    if (($cmd2ok==0))
    then
    echo "command2: all|eureka|remove|get" 
    else
    echo "---------------------------本次启动:$okcnt个服务"
    fi
    }
    
    stop(){ 
    local APPNAME=
    local CLASSNAME=
    local PROJECTDIR=
    local command="sh demo.sh stop"
    local cmd2="$1"
    local cmd2ok=0
    #local C_PID="0"
    local okcnt=0
    echo "---------------------------开始停止服务..."
    for(( i=0;i<${#APPS[@]};i++))
    do
    APPNAME=${APPS[$i]}
    NAME=${NAMES[$i]}
    CLASSNAME=${JARS[$i]}
    PROJECTDIR=${PATHS[$i]}
    if [ "$cmd2" == "all" ] || [ "$cmd2" == "$APPNAME" ]; then
    cmd2ok=1
    #ps -ef | grep "$CLASSNAME" | awk '{print $2}' | while read PID 
    PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`	
    #do 
    #C_PID=$(ps --no-heading $PID | wc -l)
    #if [ "$C_PID" == "1" ]; then
    if [ -n "$PID" ]
    then
    echo "$NAME:PID=$PID准备结束"
    kill $PID
    #C_PID=$(ps --no-heading $PID | wc -l)
    #while (("$C_PID" == "1"))
    PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
    while [ -n "$PID" ]
    do
    sleep 1s
    #C_PID=$(ps --no-heading $PID | wc -l)
    PID=`ps -ef |grep $(echo $CLASSNAME |awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
    done
    echo "$NAME:成功结束"
    okcnt=$(($okcnt+1))
    else
    echo "$NAME:未运行"
    fi 
    #done 
    fi
    done
    if (($cmd2ok==0))
    then
    echo "command2: all|eureka|remove|get" 
    else
    echo "---------------------------本次共停止:$okcnt个服务" 
    fi
    }
    
    case "$1" in 
    start) 
    start "$2"
    exit 1
    ;; 
    stop) 
    stop "$2"
    ;; 
    restart) 
    stop "$2"
    start "$2"
    ;; 
    *) 
    echo "command1: start|stop|restart" 
    exit 1 
    ;; 
    esac
    
    
    

    既然脚本创建好了,你必须先把脚本这一关过了,执行一下看看是否运行成功,如果不成功,就先把这个问题解决了,否则后面没办法进行下去。

    执行脚本命令如下:

    //注意:该方法适应于我这个脚本---
    sh /jar/demo.sh start all
    bash /jar/demo.sh start all
    //如果出现其它没有权限什么的错误,就赋值给脚本执行权限
    sudo chmod 777 /jar/demo.sh
    //至于其它错误,可自行解决!!! 

    第三:

    将脚本设置开机自动启动

    我的系统是Ubuntu 16.0.4,

    该环境  /etc 目录下有一个 rc.local 这个是系统开机启动时自动执行里面的命令的

    大多数人也就犯了一个通病,说:既然是执行命令的,那么我直接运行这个脚本不就行了嘛?

    一丶它虽然可以允许脚本,但是它不知道你的脚本依赖关系到底是如何,因为你的eureka启动之后,后续的其它服务与eureka是有依赖关系的,它不知道你后面的服务是否有eureka有关系,换而言之就是不知道它该注册到哪里去,由此就会出错,在你查看进程的时候你可以看一下,只有一个eureka进程,其它的就没有进程!!!

    二丶这个/etc/rc.local 我理解的就是它在系统开机时最后执行的!其它的我也不了解,这里先说解决办法。

    解决办法如下:

    进入/etc/init.d目录下

    创建文件:  例如我的   shjardemo

    赋给它权限为777   

    该文件内容如下

    #!/bin/bash
    # MyApp
    #
    # description: bla bla
    
    case $1 in
        start)
    #这里 /bin/bash  就是linux的一个什么软连接啥的,我也不晓得什么意思
    #后面的 就是启动脚本  然后日志输出在 /jar目录下  (该日志文件会自动生成)
    #后面的停止和重启 是一样的理解
            /bin/bash /jar/demo.sh start all >/jar/initdemo.output 2>&1
        ;;
        stop)
            /bin/bash /jar/demo.sh stop all >/jar/initdemo.output 2>&1
        ;;
        restart)
            /bin/bash /jar/demo.sh stop all >/jar/initdemo.output 2>&1
            /bin/bash /jar/demo.sh start all >/jar/initdemo.output 2>&1
        ;;
    esac
    exit 0
    

     然后执行命令:该命令的意思就是将这个文件添加到系统开机执行

    sudo update-rc.d shjardemo defaults

     如果出现这个信息,不用担心,这是init.d目录修改时自动出现的,没有关系,

    然后重启系统

    sudo  reboot

    之后等待 输入ip和端口  查看eureka是否访问成功就行了,我的效果如图所示:

     注意:如果等了一会儿出不来,你的脚本没问题,那么试试这个能否解决

    第一:

    输入命令:

    #shjardemo 代表的是你启动脚本的那个文件夹 
    sudo service shjardemo start
    #如果启动之后报错,出现一大串字母还有红色的提升信息
    那么执行这个命令
    systemctl daemon-reload
    #然后再次重启 试一下!!!

     

    如果有任何问题,联系我 qq2509647976  微信:x331191249

    或者提出意见~~~

    展开全文
  • 1、编写执行脚本 #!/bin/sh exec xxxx #或者是 python xxxx.py 总之把执行命令写在shell脚本中。 2、修改权限,放入系统命令中 $ chmod a+x 脚本的名字 $ cp 脚本的名字 /usr/bin/ ...

    1、编写执行脚本

    #!/bin/sh
    
    exec xxxx
    #或者是
    python  xxxx.py
    
    

    总之把执行命令写在shell脚本中。

    2、修改权限,放入系统命令中

    $ chmod a+x 脚本的名字
    $ cp 脚本的名字 /usr/bin/
    展开全文
  • 首先在ubuntu下打开一个终端terminal (ctrl+alt+T), 然后新建一个cpp(命令为touch test_hello.cpp),然后用 vim test_hello.cpp, 按i键进入编辑模式 test_hello.cpp的内容如下: #include int main() {  std:...

    首先在ubuntu下打开一个终端terminal (ctrl+alt+T), 然后新建一个cpp(命令为touch test_hello.cpp),然后用  vim test_hello.cpp, 按i键进入编辑模式

    test_hello.cpp的内容如下:

    #include<iostream>

    int main()

    {

          std::cout<<"hello world";

    return 1;

    }

    然后按esc键退出编辑模式,然后采用:wq保存。

    再此在terminal中touch test.sh 新建一个脚本, 采用vim 打开,同样输入以下内容保存

    脚本内容如下:

    #!/bin/bash  (这一行必须这么写,采用shell编译器,其实在\bin目录下有很多语言的编译器如perl python等常用脚本语言编译器)

    g++ -o result test_hello.cpp


    然后在终端 sh test.sh, 那么就会生成result这个可执行的文件(当然任何文件都可以采用chmod +x filename 使之变成可执行文件)

    然后再采用./result 就可以看到输出为hello world. 


    以上完全是个小总结,以便自己以后查看


    展开全文
  • 今天安装opencv2.3.0在自己的机器上,因为觉得用脚本执行一系列安装的命令比较方便,所有花了一天的时间初步学习了怎么编写最简单的shell 脚本。  首先安装Opencv2.3.0需要cmake 配合。所以去官网上下载了cmake2.8...

         今天安装opencv2.3.0在自己的机器上,因为觉得用脚本执行一系列安装的命令比较方便,所有花了一天的时间初步学习了怎么编写最简单的shell 脚本。

         首先安装Opencv2.3.0需要cmake 配合。所以去官网上下载了cmake2.8的源码进行编译安装。

         其实安装cmake 的步骤并不复杂,需要先安装g++ 然后在cmake 的目录里面make && make install 。但是今天要使用shell 脚本来执行自动下载和安装就比较麻烦了。附上源代码。

         代码本身并作过多的解释,应该很容易看得懂,就是首先下载,然后解压,然后判断当前的系统是否已经安装了g++,之后在编译安装。

         不过最要命的问题是在执行shell脚本的时候会出现:unexpected operator.这样的错误。查阅资料后发现了解决的方法,在我的另外一篇文字中http://blog.csdn.net/bush2582/article/details/20140871

        之后,就顺顺利利的搞定了。

    #########################################################################
    # File Name: Install_cmake.sh
    # Author: ma6174
    # mail: ma6174@163.com
    # Created Time: 2014年02月28日 星期五 13时32分53秒
    #########################################################################
    #!/bin/bash
    
    
    ##############################################
    # FunctionName:echocolor
    # Author: bush2582
    # Role:the output will have color
    # Created Time: 
    ##############################################
    echocolor(  )
    {
    	  echo -e "\e[0;33m${@}\e[0m";
    }
    
    
    
    ##############################################
    # FunctionName:InstallGCC
    # Author: bush2582
    # Role:check g++ is already in system
    # Created Time: 
    ##############################################
    function InstallGCC (  )
    {
    	
    	which g++;
    	if [ $? -eq 1 ];
    	then
    		read -p " g++ is not installed in this system do you want to install? (Y/y/n/N) " ynInstall_GCC;
    		
    		if [ $ynInstall_GCC = "Y" ] || [ $ynInstall_GCC = "y" ] ;
    		then
    			#echo " now we will install g++ ";
    			echocolor "now we will install g++"
    			sudo apt-get install g++;
    		fi
    	else
    		echocolor "g++ already install in this system ";
    	fi
    }
    ##############################################
    # FunctionName:InstallCmake
    # Author: bush2582
    # Role:install Cmake
    # Created Time: 
    ##############################################
    
    function InstallCmake(  )
    {
    	  InstallGCC;
    	  echocolor " now we will star the program that CMake is installed in this system ";
    	  cd cmake-2.8.0;
    	  ./configure;
    	  sudo make;
    	  sudo make install;
    	  exit 0;
    }
    
    
    
    
    #########################################################################
    read -p "Do you want to download Cmake? (Y/y/n/N)?" downyn
    if [ $downyn = "Y" ] || [ $downyn = "y" ];
    then 
    	wget http://down1.chinaunix.net/distfiles/cmake-2.8.0.tar.gz;
    	echocolor "now Staring Tar cmake";
    	tar -xvf cmake-2.8.0.tar.gz;
    else
    	echocolor "now Staring Tar cmake";
    	tar -xvf cmake-2.8.0.tar.gz;
    fi
    
    read -p " Do you want to install camke now (Y/y/n/N)? " yn
    if [ $yn = "y"  ] || [ $yn = "Y"  ] ;
    then	
    	InstallCmake;
    else
    	exit 0;
    fi


    #######################################################################
    # File Name: LoadOpencv.sh
    # Author: ma6174
    # mail: ma6174@163.com
    # Created Time: 2014年02月28日 星期五 10时46分11秒
    #########################################################################
    #!/bin/bash
    
    #--------------------------------------------#
    # FunctionName:echocolor
    # Author: bush2582
    # Role:the output will have color
    # Created Time: 
    #--------------------------------------------#
    echocolor(  )
    {
    	  echo -e "\e[0;33m${@}\e[0m";
    	  
    }
    
    
    read -p "Do you want to download Opencv-2.3.0? (Y/N)" DownLoadOpencv
    if [ $DownLoadOpencv = "Y" ];
    then
    	echocolor "now Staring downLoad Opencv2.3.0 ";
    	wget http://nchc.dl.sourceforge.net/project/opencvlibrary/opencv-unix/2.3/OpenCV-2.3.0.tar.bz2;
    	echocolor "Staring tar OpenCV-2.3.0.tar.bz2 "
    	tar -xvf OpenCV-2.3.0.tar.bz2
    else
    	tar -xvf OpenCV-2.3.0.tar.bz2
    	echocolor "Staring tar OpenCV-2.3.0.tar.bz2 "
    fi
    
    cd OpenCV-2.3.0
    sudo mkdir relese
    cd relese
    
    read -p "Please input Dir which you want to install " Dir
    sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=$Dir -D BUILD_PYTHON_SUPPORT=ON ..
    read -p  "now we will star opencv make&&install  in $Dir .Do you want to continue?( Y/N )  " GoOn
    if [ $GoOn = "Y"  ] ;
    then
    	sudo make 
    	sudo make install
    else
    	exit 0;
    fi

    展开全文
  • Ubuntu下运行Shell脚本

    千次阅读 2018-05-19 15:27:27
    将一个脚本保存为带有扩展名的文件,如test.sh, 在终端上输入: chmod +x test.sh 然后输入: test.sh 终端显示: test.sh 找不到命令(后来看了鸟个私房菜,发现这样输入,系统只会在$PATH上列出的路径查找,而不会...
  • ubuntu上第一个shell脚本

    万次阅读 2017-05-27 10:20:08
    参考:https://billie66.github.io/TLCL/book/zh/chap25.htmlUbuntu下第一个shell脚本在home目录下新建文件夹xkmkdir xk进入xk文件夹,新建文件helloshelltouch helloshell在helloshell文件中输入如下内容:#!...
  • ubuntu中写一个shell脚本的过程

    千次阅读 2014-10-28 11:05:08
    gedit hello.sh ,然后输入 #!/bin/bash echo "Hello world!" chmod +x hello.sh ./hello.sh
  • Ubuntu编写shell脚本

    千次阅读 2015-11-16 21:34:02
    先介绍几个常用命令 $()在bash中叫做 命令替换,回调用一个subshell。通俗点讲,就是被它括起来的命令部分将优先执行。 echo(显示文字) echo $A 表示输出变量A的值 echo [-ne][字符串]或 echo [--help][--...
  • Ubuntu中如何双击后运行shell脚本

    万次阅读 2018-03-06 15:03:19
    当你双击一个脚本(.sh文件)的时候,你想要做的是什么?通常的想法是执行它。但是在Ubuntu下面却不是这样,或者我应该更确切地说是在Files(Nautilus)中。...shell脚本用文件编辑器打开的原因是F...
  • shell脚本----for循环

    万次阅读 2013-06-30 13:14:23
    1.方法1 #!/bin/bash for((i=1;i;i++)) do echo $i done 保存为for1.sh 直接sh for1.sh ...代码对于标准bash而言没有错,因为Ubuntu为了加快开机速度,用dash代替了传统的bash,是dash在捣鬼
  • ubuntu编写开机自启动shell脚本

    万次阅读 2013-05-01 17:20:09
    1、首先编写一个简单的shell脚本  vimtest.sh(不习惯使用vim可以使用nano)  进入vim后按i键,然后输入(#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序。) #!/bin/bash echo"Helloworld!...
  • Ubuntushell终端写一个简单脚本

    千次阅读 2017-06-07 20:32:28
    1.打开终端(terminal),输入vi hello.sh 2然后在打开的脚本文件中键入: #!/bin/bash echo "hello world!...本人编写这个主要是因为测试一个shell能否实现简单脚本的功能,拿来分享,大家看看就好~~~
  • 看的是鸟哥的私房菜,里面有讲到执行shell脚本有两种方法: 1. 设置执行属性: chmod 755 file 执行(如果已经在当前目录) : ./file 2. 使用: sh file 执行 .但是在vmware里装的ubuntu 11.10却无法执行 #!/bin/...
  • Ubuntu构建一个简单基本脚本

    千次阅读 2019-03-17 20:39:23
    但有时候我们需要输入多个命令,并处理多个命令的结果,甚至需要将一个命令的结果传给另一个命令,因此我们需要用到shell脚本,将多个命令串联起来。在shell中如果想要两个命令一起运行,可以把它们放在同一行,同时...
  • ubuntu运行sh脚本sudo自动输入密码

    万次阅读 2017-05-10 14:37:43
    第一种方法:使用管道(上一个命令的 stdout 接到下一个命令的 stdin): #!/bin/bash echo password | sudo -S apt-get update第二种方法 使用文本块输入重定向: 第二种方法: #!/bin/bash sudo -S apt-get ...
  • Ubuntu 编写简单的脚本

    万次阅读 2017-08-18 18:01:58
    1、创建一个文件用于存放脚本 mkdir shellPackage 2、创建一个空的文件 toudh myShell 3、编辑文件 我使用的是gedit,也可以使用VIM,这个我不太熟 gedit myShell 4、第一行 #!/bin/bash 5、输入命令 例1、我这里...
  • 1、新建个shell脚本文件(例starter.sh) 内容如下 #!/bin/sh ### BEGIN INIT INFO # Provides: starter # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 ...
  • 在学习dubbo过程中,上传自己写的脚本,执行的时候提示...解决方法是使用chmod命令为shell脚本赋予权限 chmod 777 ./service-demo.sh 参考:http://blog.csdn.net/this_capslock/article/details/17415409 ...
  • Linux Shell中的延时函数 sleep

    万次阅读 2014-02-27 15:47:13
    在 linux shell 脚本中经常需要做一些延时处理。 所以经常要用到 sleep 或 usleep 函数。 下面来说一下 sleep 和 usleep 的区别: sleep : 默认以秒为单位。 usleep : 默认以微秒为单位。 1s = 1000ms = 10
  • 修改Ubuntu默认Shell

    千次阅读 2015-09-24 14:35:27
    奇怪的错误在linux下的shell脚本中,第一行一般会指明该脚本的执行程序名,以便为该脚本拥有执行权限时可以通过脚本名直接运行。 我在控制台上一般通过 sh 命令执行shell脚本,如sh xxx.sh;所以有次我新建一个shell...
1 2 3 4 5 ... 20
收藏数 44,804
精华内容 17,921
关键字:

ubuntu 怎么使用shell脚本