精华内容
下载资源
问答
  • 如何在Bash脚本中获取该脚本的源目录问题描述如何获得Bash脚本的源目录无软连接指向脚本有软连接指向脚本练习一下 问题描述   Bash(Bourne Again Shell)脚本通常用来启动一个程序,比如hadoop生态中的命令一般是都...

    问题描述

      shell 脚本通常用来启动一个程序,比如 hadoop 生态中的命令一般是都基于 shell 的。每次写 shell 都要到处去查这个问题,当然,你用绝对路径,那就没必要纠结这个问题了。在一次跟踪 Hive 启动脚本的时候,看到了一个链接,打开一看,竟然有1.5m的访问量,现在分享给大家,想看原文的可以点击这里

    如何获得shell脚本的源目录

    无软连接指向脚本

    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
    

    无论在哪里调用包含了这行代码的shell脚本,都可以得到正确的脚本源目录。

    有软连接指向脚本

    #!/bin/bash
    
    SOURCE="${BASH_SOURCE[0]}"
    while [ -h "$SOURCE" ]; do # 直到$SOURCE不是软连接
      DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
      SOURCE="$(readlink "$SOURCE")"
      [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # 如果 $SOURCE(软连接) 指向的是一个相对地址,则需要将相对地址解析成绝对地址
    done
    DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
    

    这段脚本可以在有alias、source、bash -c、软连接等组合的情况下正确地给出Bash脚本的源目录。需要注意的是,如果在执行这段代码之前,先cd到了其它目录,那这个结果不正确了。
      此外,有两点需要注意:1.CDPATH(如果设置了CDPATH,cd一个目录时,首先查找CDPATH,如果CDPATH指明此目录,则此目录成为当前工作目录)。2.聪明的用户覆盖了cd命令将其输出重定向到stderr中,需要小心stderr的副作用(看字面是这么个意思,但真没这么用过)。

    练习一下

    #!/bin/bash
    SOURCE="${BASH_SOURCE[0]}"
    while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
      TARGET="$(readlink "$SOURCE")"
      if [[ $TARGET == /* ]]; then
        echo "SOURCE '$SOURCE' is an absolute symlink to '$TARGET'"
        SOURCE="$TARGET"
      else
        DIR="$( dirname "$SOURCE" )"
        echo "SOURCE '$SOURCE' is a relative symlink to '$TARGET' (relative to '$DIR')"
        SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
      fi
    done
    echo "SOURCE is '$SOURCE'"
    RDIR="$( dirname "$SOURCE" )"
    DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
    if [ "$DIR" != "$RDIR" ]; then
      echo "DIR '$RDIR' resolves to '$DIR'"
    fi
    echo "DIR is '$DIR'"
    

    输出结果类似下面的样子

    SOURCE './scriptdir.sh' is a relative symlink to 'sym2/scriptdir.sh' (relative to '.')
    SOURCE is './sym2/scriptdir.sh'
    DIR './sym2' resolves to '/home/ubuntu/dotfiles/fo fo/real/real1/real2'
    DIR is '/home/ubuntu/dotfiles/fo fo/real/real1/real2'
    
    展开全文
  • Linux-shell脚本

    2020-03-21 08:52:39
    目录脚本编写习惯脚本的执行方式使用判断式shell脚本的默认变量参数变量的偏移:shift条件判断条件选择函数循环 脚本编写习惯 脚本的功能;脚本的版本信息;脚本的作者与联系方式;脚本的版权声明方式;脚本的...

    脚本编写习惯

    • 脚本的功能;
    • 脚本的版本信息;
    • 脚本的作者与联系方式;
    • 脚本的版权声明方式;
    • 脚本的History;
    • 脚本内较特殊的命令,使用【绝对路径】的方式来执行;
    • 脚本运行时需要的环境变量预先声明与设置;

    数值计算

    var = ((运算内容))

    脚本的执行方式

    • 利用直接执行方式来执行脚本
      在子进程中执行;
      使用命令【bash】【sh
      使用【./】的方式执行
    • 利用【source】来执行脚本
      在当前进程中执行;

    使用判断式

    • test
    • []
      注意使用中括号的两端需要有空格符来分隔;
    • 在中括号[]内的每个组件都最好使用空格来分隔;
    • 在中括号内的变量,使用双引号括起来;
    • 在中括号内的常数,使用单引号或双引号括起来;

    shell脚本的默认变量

    • $num
      num为>=0的数字
    • $#
      表示参数的个数;
    • $@
      代表【”$1″”$2″”$3″…】每个变量是独立的
    • $*
      代表【”$1c$2c$3c….”】,其中的c为分隔符,默认为空格。

    创建一个shell脚本。

    echo $0
    echo $1
    echo $#
    echo $@
    echo $*

    运行该脚本。

    [root@izbp1fuxe9jel25ki8odhwz /Ethan]# ./test.sh a b c d 
    ./test.sh
    a
    4
    a b c d
    a b c d

    参数变量的偏移:shift

    shift后可以接数字,代表拿掉最前面的几个参数的意思。

    脚本程序如下。

    echo $*
    shift
    echo $*
    shift 2
    echo $*

    运行结果如下。

    [root@izbp1fuxe9jel25ki8odhwz /Ethan]# ./test.sh 1 2 3 4 5
    1 2 3 4 5
    2 3 4 5
    4 5

    条件判断

    if [ 条件判断式 ];then
    fi
    if [ 条件判断式 ];then
        #内部代码段
    elif
        #内部代码段
    else
        #内部代码段
    fi

    条件选择

    case $VarName in
        "匹配字段1")
            #内部代码段
        ;;
        "匹配字段2")
            #内部代码段
        ;;
        *)
            #内部代码段
        ;;
        ...
    esac

    函数

    函数命名方法。

    function funName(){
        #内部代码段
    }

    函数调用方法

    funName 1 2 3 4

    函数也有内置变量,内置变量形式与shell脚本内置变量一样。

    测试脚本如下。

    function fun(){
            echo $0
            echo $1
            echo $*
    }
    fun 1 2 3 a

    运行结果如下。

    [root@izbp1fuxe9jel25ki8odhwz /Ethan]# ./test.sh   
    ./test.sh
    1
    1 2 3 a

    循环

    while [ 判断式 ]
    do
        #内部代码段
    done
    until [ 判断式 ]
    do
        #内部代码段
    done
    for i in var1 var2 var3 ...
    do
        #内部代码段
    done
    for ((初始值;限制值;赋值运算))
    do
        #内部代码段
    done
    展开全文
  • linux脚本

    2017-12-30 12:56:41
    创建shell脚本:必须在文件第一行中指定要使用的shell.例如:#!/bin/bash.在shell中,注释也用#开头,但是...将shell脚本文件所处的目录添加到PATH环境变量中. 在提示符中用绝对或者相对路径来引用shell脚本文件. 显
    1. 创建shell脚本:必须在文件第一行中指定要使用的shell.例如:#!/bin/bash.在shell中,注释也用#开头,但是shell只会处理第一行的代码.编写完shell脚本后,需要对所编写的shell文件赋予可执行权限,不然无法运行.常见的解决shell脚本不能运行的方法:
      • 将shell脚本文件所处的目录添加到PATH环境变量中.
      • 在提示符中用绝对或者相对路径来引用shell脚本文件.
    2. 显示消息:echo,利用echo命令来显示想要输出的消息,默认情况下,不需要使用引号将所想要显示的消息划定出来,但是当所需要显示的消息中含有引号时,必须使用引号将其划定,并且两种引号不能一样,例如,消息中使用'',那么必须使用""将整个消息划定.
    3. 命令替换命令:从命令输出中提取消息,把输出赋给变量.有两种方法可以将命令赋给变量
      • 反引号“:
      • $()格式.
    4. 重定向输出:可以将命令的输出直接输入到文件:使用符号>.此时会覆盖文件中的内容,另外一个命令>>,也表示输出重定向,但是不会覆盖文件中的内容.例如date > test表示将当前日期写入到test文件中.
    5. 重定向输入:可以将文件的内容重定向到命令.使用符号<,例如命令wc < test,表示将test中内容进行排序.(wc 命令用于对数据文本中的数据进行统计,默认情况下,会输出三个值,文本的行数,文本的词数,文本的字节数).
    6. 内联输入重定向:符号表示为<<,这种方法无需使用文件重定向,直接在命令行中指定用于输入重定向的数据即可.其常见命令如下:
      command << marrker
      data
      marker
      例如
      wc << EOF
      testing1
      testing2
      testing3
      EOF
      其输出结果如下:
      3 3 27
    7. 管道:通常由|连接连两个命令,前一个命令的输出结果作为后一个命令的输入,linux系统会同时执行这两个命令,数据不会用到任何中间文件和缓存区.
    8. shell中执行数学运算:
      • 使用expr命令:例如,expr 5 * 2.注意有些运算符需要使用转义字符进行转义,另外一种方式就是使用方括号,将数学表达式在方括号中进行计算.
      • 在shell中,只支持整数运算.
      • 另外一种方式就是使用bc,看下面得到例子
        #variable = (echooptions;expression|bc)var1=(echo “scale=4; 4/5.8” | bc)
        echo The answer is $var1
        其中scale指定精确度.即保留到小数点后四位.
    9. 状态码:shell中的每个程序都使用退出状态码来标记shell已经运行结束.若状态码为0,表示成功执行,若状态码为整数,则表示错误执行.
    展开全文
  • 自动化部署脚本文件目录: ...这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)。 Install_log=$SCRIPTPATH/install_log.txtecho...

    自动化部署脚本文件目录:

    运行主程序:./install.sh

     

    #!/bin/bash

    SCRIPTPATH=$(cd "$(dirname "$0")"; pwd)#

    这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)。



    Install_log=$SCRIPTPATH/install_log.txt

    echo "***start install***" > $Install_log
    echo " workspace is $SCRIPTPATH" | tee -a "$Install_log"#写入日志文件日志




    show_license() {
        clear
        confirm='Do you agree with this license? [y/n]: '
        more license.txt


        lic_agreed=''


            while read -p 'Do you agree with this license? [y/n]: ' lic_agreed
            do
                    case "$lic_agreed" in
                            y | Y ) break;;
                            n | N ) echo 'License refused - exiting.' ;exit 1;;
                            * )     ;;
                    esac
            done
    }

    install_expect(){
        # start install expect
        rpm -ivh --force expect/tcl-8.5.13-8.el7.x86_64.rpm
        if [[ 0 != $? ]] ; then
            echo "tcl install Failed !!!!!!"   | tee -a "$Install_log"
            exit 1
        else
            echo "tcl install Success !!!!!!"   | tee -a "$Install_log"
        fi
            
        rpm -ivh --force expect/expect-5.45-14.el7_1.x86_64.rpm
        if [[ 0 != $? ]] ; then
            echo "expect install Failed !!!!!!"   | tee -a "$Install_log"
            exit 1
        else
            echo "expect install Success !!!!!!"   | tee -a "$Install_log"
        fi
        
        # expect install finish
    }

    install_unzip(){
        # start unzip
        rpm -ivh --force unzip/unzip-6.0-19.el7.x86_64.rpm
        if [[ 0 != $? ]] ; then#$? 是上一个程序执行是否成功的标志,如果执行成功则$? 为0,否则 不为0


            echo "unzip install Failed !!!!!!"   | tee -a "$Install_log"
            exit 1
        else
            echo "unzip install Success !!!!!!"   | tee -a "$Install_log"
        fi
        #unzip install finish
    }

    install_killall(){
        # start killall
        rpm -ivh --force killall/psmisc-22.20-15.el7.x86_64.rpm
        if [[ 0 != $? ]] ; then
            echo "killall psmisc install Failed !!!!!!"   | tee -a "$Install_log"
        else
            echo "killall psmisc install Success !!!!!!"   | tee -a "$Install_log"
        fi

        #killall install finish
    }

    install_snmp(){
        snmpstatus=0
        rpm -ivh --force snmplib/net-snmp-libs-5.7.2-33.el7_5.2.x86_64.rpm
        let snmpstatus+=$?
        sleep 2
        rpm -ivh --force snmplib/net-snmp-utils-5.7.2-33.el7_5.2.x86_64.rpm
        let snmpstatus+=$?
        if [[ 0 != $snmpstatus ]] ; then
            echo "snmp  install Failed !!!!!!"   | tee -a "$Install_log"
        else
            echo "snmp  install Success !!!!!!"   | tee -a "$Install_log"
        fi
    }

    install_java(){
        #start to install java
        rpm -ivh --force java/jdk-8u144-linux-x64.rpm
        if [[ 0 != $? ]] ; then
            echo "java  install Failed !!!!!!"   | tee -a "$Install_log"
            exit 1
        else
            echo "java  install Success !!!!!!"   | tee -a "$Install_log"
        fi
        export JAVA_HOME=/usr/java/jdk1.8.0_144
        export JRE_HOME=$JAVA_HOME/jre
        export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
        export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/dt.jar
        #java install finish
    }

    install_activemq(){
        #start to install activemq
        tar zxvf activemq/apache-activemq-5.13.0.tar.gz | tee -a "$Install_log"
        $SCRIPTPATH/apache-activemq-5.13.0/bin/linux-x86-64/activemq start &
        sleep 5
        echo "activemq install finish" | tee -a "$Install_log"
        #activemq install finish
    }

    install_redis(){
        #start to install redis
        tar zxvf redis/redis-3.2.9.tar.gz
        $SCRIPTPATH/redis-3.2.9/src/redis-server $SCRIPTPATH/redis-3.2.9/redis.conf &
        sleep 5
        echo "redis install finish" | tee -a "$Install_log"
        #redis install finish
    }

    install_systemdlib(){
        libstatus=0
        rpm -ivh --force libsystemd/lz4-1.7.5-2.el7.x86_64.rpm
        let libstatus+=$?
        sleep 2
        rpm -ivh --force libsystemd/systemd-libs-219-57.el7.x86_64.rpm
        let libstatus+=$?
        if [[ 0 != $libstatus ]] ; then
            echo "systemdlib  install Failed !!!!!!"   | tee -a "$Install_log"
            exit 1
        else
            echo "systemdlib  install Success !!!!!!"   | tee -a "$Install_log"
        fi
    }

    #下面这个函数,由于最小安装模式下缺少依赖包,所以将安装成功的文件进行an并集


    install_postgres(){
        #start to install postgres
        cd postgres
        status=0
        rpm -ivh --force pgdg-centos96-9.6-3.noarch.rpm
        let status+=$?# $?取上一个安装结果,安装成功为0,安装失败为1


        sleep 2
        rpm -ivh --force postgresql96-libs-9.6.5-1PGDG.rhel7.x86_64.rpm
        let status+=$?
        sleep 2
        rpm -ivh --force postgresql96-9.6.5-1PGDG.rhel7.x86_64.rpm
        let status+=$?
        sleep 2
        rpm -ivh --force libxslt-1.1.28-5.el7.x86_64.rpm
        let status+=$?
        sleep 2
        rpm -ivh --force postgresql96-contrib-9.6.5-1PGDG.rhel7.x86_64.rpm
        let status+=$?
        sleep 2
        rpm -ivh --force postgresql96-devel-9.6.5-1PGDG.rhel7.x86_64.rpm
        let status+=$?
        sleep 2
        rpm -ivh --force postgresql96-server-9.6.5-1PGDG.rhel7.x86_64.rpm
        let status+=$?
        sleep 2
        if [[ 0 != $status ]] ; then
            echo "postgres  install Failed !!!!!!"   | tee -a "$Install_log"
            exit 1
        else
            echo "postgres  install Success !!!!!!"   | tee -a "$Install_log"
        fi
        sleep 2
        cd $SCRIPTPATH
        #postgres install finish
    }

    init_postgresql(){n
        #init postgresql
        adduser uxsino
        /usr/pgsql-9.6/bin/postgresql96-setup initdb
        service postgresql-9.6 start
        $SCRIPTPATH/init-data.sh | tee -a "$Install_log"
        sleep 10
        mv -f $SCRIPTPATH/postgresql.conf /var/lib/pgsql/9.6/data/
        mv -f $SCRIPTPATH/pg_hba.conf /var/lib/pgsql/9.6/data/
        sleep 5
        service postgresql-9.6 restart
        sleep 10
        echo "postgresql init finish" | tee -a "$Install_log"
        #postgresql init finish
    }

    stop_firewalld(){
        #stop & disable firewalld
        
        systemctl stop firewalld.service | tee -a "$Install_log"
        sleep 10
        systemctl disable firewalld.service | tee -a "$Install_log"
        
        echo "stop & disable firewalld finish" | tee -a "$Install_log"
        #stop & disable firewalld finish
    }

    auto_run_config(){
        echo "export JAVA_HOME=/usr/java/jdk1.8.0_144" > $SCRIPTPATH/autostart.sh
        echo "export JRE_HOME=$JAVA_HOME/jre" >> $SCRIPTPATH/autostart.sh
        echo "export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin" >> $SCRIPTPATH/autostart.sh
        echo "export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/dt.jar" >> $SCRIPTPATH/autostart.sh
        echo "service postgresql-9.6 restart" >> $SCRIPTPATH/autostart.sh
        echo "sleep 30" >> $SCRIPTPATH/autostart.sh
        echo "$SCRIPTPATH/redis-3.2.9/src/redis-server $SCRIPTPATH/redis-3.2.9/redis.conf &" >> $SCRIPTPATH/autostart.sh
        echo "sleep 10" >> $SCRIPTPATH/autostart.sh
        echo "$SCRIPTPATH/apache-activemq-5.13.0/bin/linux-x86-64/activemq start &" >> $SCRIPTPATH/autostart.sh
        echo "sleep 10" >> $SCRIPTPATH/autostart.sh
        echo "systemctl stop firewalld.service" >> $SCRIPTPATH/autostart.sh
        echo "sleep 10" >> $SCRIPTPATH/autostart.sh
        echo "$SCRIPTPATH/simo/scripts/runlib" >> $SCRIPTPATH/autostart.sh
        chmod 777 $SCRIPTPATH/autostart.sh
        confirm='Do you want set SIMO auto run? [y/n]: '
        auto_agreed=''
        
            while read -p 'Do you want set SIMO auto run? [y/n]: ' auto_agreed
            do
                    case "$auto_agreed" in
                            y | Y )
                            #set simo auto run
                            echo "$SCRIPTPATH/autostart.sh" >> /etc/rc.d/rc.local  #linux系统自启动文件需要配置的文件路径
                            chmod +x /etc/rc.d/rc.local
                            break;;
                            n | N ) echo 'Do not set SIMO auto run' ;break;;
                            * )     ;;
                    esac
            done
    }

    #unzip simo and config simo
    unzip_simo(){
        unzip $SCRIPTPATH/simo-source/simo.zip
        cp $SCRIPTPATH/application.properties $SCRIPTPATH/simo/scripts/
        #enable/disable servicecenter
        echo "$SCRIPTPATH/simo/scripts/runmodule simo-servicecenter 512m &" > $SCRIPTPATH/runlib
        echo "sleep 5" >> $SCRIPTPATH/runlib
        #enable/disable collector
        echo "$SCRIPTPATH/simo/scripts/runmodule simo-collector 1024 &" >> $SCRIPTPATH/runlib
        echo "sleep 5" >> $SCRIPTPATH/runlib
        #enable/disable business
        echo "$SCRIPTPATH/simo/scripts/runmodule simo-business 512m  &" >> $SCRIPTPATH/runlib
        echo "sleep 5" >> $SCRIPTPATH/runlib
        #enable/disable itsm
        echo "$SCRIPTPATH/simo/scripts/runmodule simo-itsm 1024m &" >> $SCRIPTPATH/runlib
        echo "sleep 5" >> $SCRIPTPATH/runlib
        #enable/disable cmdb
        echo "$SCRIPTPATH/simo/scripts/runmodule simo-cmdb 512m &" >> $SCRIPTPATH/runlib
        echo "sleep 5" >> $SCRIPTPATH/runlib
        #enable/disable workflow
        echo "$SCRIPTPATH/simo/scripts/runmodule simo-workflow 512m &" >> $SCRIPTPATH/runlib
        echo "sleep 10" >> $SCRIPTPATH/runlib
        #enable/disable mc
        echo "$SCRIPTPATH/simo/scripts/runmodule simo-mc 2048m &" >> $SCRIPTPATH/runlib
        mv -f $SCRIPTPATH/runlib $SCRIPTPATH/simo/scripts/
    }

    run_simo(){
        chmod 777 $SCRIPTPATH/simo/scripts/runlib
        $SCRIPTPATH/simo/scripts/runlib
    }

        show_license
        install_expect
        install_unzip
        install_killall
        install_snmp
        install_java
        install_activemq
        install_redis
        install_systemdlib
        install_postgres
        init_postgresql
        stop_firewalld
        auto_run_config
        unzip_simo
        run_simo
        
        
    exit 0

     

    init-data.sh脚本如下:

    #!/usr/bin/expect

    set timeout 900
    set user postgres
    spawn su $user
    expect "bash-4.2*"
    send "psql\r"
    expect "postgres=#"
    send "alter user postgres with password 'postgres';\r"
    expect "postgres=#"
    send "create user uxsino with password 'Uxs!nO10';\r"
    expect "postgres=#"
    send "create database simo_dev owner uxsino;\r"
    expect "postgres=#"
    send "GRANT ALL PRIVILEGES ON DATABASE simo_dev to uxsino;\r"
    expect "postgres=#"
    send "\\q\r"
    expect "bash-4.2*"
    send "exit\r"
    expect eof

    转载于:https://www.cnblogs.com/zyy98877/p/9254451.html

    展开全文
  • if [[ $0 =~ ^\/.* ]] #判断当前脚本是否为绝对路径,匹配以/开头下的所有 then script=$0 else script=$(pwd)/$0 fi script=`readlink -f $script` #获取文件的真实路径 script_path=${script%/*} #获取文件所在...
  • linux shell脚本

    2019-02-15 13:52:26
    目录 shell基础知识 什么是Shell Shell种类 查看使用Shell Shell环境定义 ...shell脚本编程 ...1 输入脚本绝对路径或相对路径 2 bash或sh +脚本 3 在脚本的路径前再加". " 或sourc...
  • 方法: workdir=$(cd $(dirname $0); pwd) 步骤: dirname $0,取得当前执行的脚本文件的父目录 cd到父目录,即进入当前工作目录 pwd显示当前工作目录
  • 要求:提醒用户输入一个绝对路径:然后请你统计输入的路径目录下有多少个文件,多少个文件夹? #!/bin/bash #提醒用户输入需要统计的文件夹的路径 read -p "请输入需要统计的文件夹的绝对路径:" fpath #file ...
  • Linux分发脚本

    2021-01-08 17:35:04
    1、编写脚本 #!/bin/bash #1 获取输入参数个数,如果没有参数,直接退出 ...#3 获取上级目录绝对路径 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir #4 获取当前用户名称 user=`whoami` #5 循环 for((ho
  • shell脚本通常是一个以 #! 起始的文本文件,字符#!...$ sh script.sh #假设该脚本位于该目录下。 $ sh /home/path/script.sh #使用script的完整路径 为了使shell脚本能够独立运行,需要具备可执行权限。要使
  • 而在 linux shell 脚本里面如果想得到当前脚本文件存放的绝对路径,也没有太现成的命令可以调用,不过可以通过下面的语句来获取: 代码如下: baseDirForScriptSelf=$(cd “$(dirname “$0″)”; pwd) echo “full ...
  • 3.1 文件和目录管理 ...linux以点开始的文件都是隐藏文件,可以使用 ls -al 查看,(.)代表当前目录,(..)代表上一级目录 相对路径 相对路径的关键在于当前在什么路径下。例如当前在/usr/loc...
  • dirname $0,取得当前执行的脚本文件的父目录 cd dirname $0,进入这个目录(切换当前工作目录) pwd,显示当前工作目录(cd执行后的) 转自:https://blog.csdn.net/feixiaohuijava/article/details/53331453 ...
  • linux同步脚本

    2019-01-04 14:24:00
    /usr/local/bin/xsync #!/bin/bash#1 获取输入参数个数,如果没有参数,直接退出pcount=$#if((pcount==0)); thenecho no args;exit;fi ...#3 获取上级目录绝对路径pdir=`cd -P $(dirname $p1...
  • #!/bin/bash #1 获取输入参数个数,如果没有参数,直接退出 pcount=$# if((pcount==0)); then echo no args; exit; fi #2 获取文件名称 ...#3 获取上级目录绝对路径 pdir=`cd -P $(dirname $p1); pwd` ...
  • Linux脚本入门

    2016-02-01 17:49:26
    指定shell脚本的路径,可将shell脚本文件所处的目录添加到PATH环境变量中;或者在 提示符中用绝对或相对路径来引用shell脚本文件。如: ./stest 文件添加执行权限:chmod u+x stest 显示消息echo命令可使控制台打印...
  • 1.直接跟随到shell目录文件下 ./shell.sh ...3.nohup shell文件绝对路径 & v eg: nohup /path/shell.sh 如果脚本配置log,可以实时查看日志 方法2和3仅仅需要给shell.sh读的权限,方法1必须给予读执
  • linux shell脚本学习

    2019-05-05 23:33:50
    shell脚本的运行方法 直接指令下达 shell.sh文件比较具备可读和可执行权限(rx),有以下3种方式执行: 绝对路径:/home/user/shell.sh 相对路径:./shell.sh 变量PATH功能:将shell.sh放在PATH指定目录内如 ~/bin...
  • 常见的一种误区,是使用pwd命 令,该命令的作用是“print name of current/working directory”,这才是此命令的真实含义,当前的工作目录,这里没有任何意思说明,这个目录就是脚本存放的目录。所以,这是不对的。...
  • 解决办法 例: ...我在test目录下有一个运行脚本ng,只能进入该目录才能运行 只要建立一个软链接即可 sudo ln -s /home/test/ng /usr/bin/ 并且建立软连接需要绝对路径,不能使用相对路径 ...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 310
精华内容 124
关键字:

linux绝对目录脚本

linux 订阅