admin';?>

首页 / php code

shell 脚本示例代码

By admin  •  2020-03-04 00:03:41  •  222次点击
永久外链: https://i.otherhill.com/static/8d19eeb45d6811eab405809b202ce664.html


arg0=$1
echo '$1:' $1

rslt=`sudo iptables -L INPUT -n -v --line-number|grep "ACCEPT.*tcp dpt:2933"|awk '{print $1}'`
echo $rslt

if [ x$rslt == "x" ]; then
    echo "not found!"
elif [[ $rslt -gt 0 ]]; then
    echo "found!"
    sudo iptables -D INPUT $rslt
    sudo iptables -I INPUT $rslt -p tcp --dport 2933 -j ACCEPT -s $arg0
fi



if [ x$target_certs_fullpath != "x" ] && [ -d $target_certs_fullpath ]; then
	cp ./fullchain.pem $target_certs_fullpath
	cp ./privkey.pem   $target_certs_fullpath
else
	target_certs_fullpath=$currpath
fi



# display random number between 6000 and 6899.
rnd=$((RANDOM%900+6000))

/run/media/lixing/6T_20181101_1/proj/php_ngx_msql_jail/run.sh
#!/usr/bin/env bash

case "$1" in 
'test')
     if [ ! -f ./dev/1.txt ]; then
     	echo "test"
	else
		echo "2"
	 fi
      
      ;;
'start')
     if [ -f ./dev/1.txt ]; then
     	sudo mount -ro bind /dev ./dev
     fi

     sudo chroot . /opt/__run.sh  $*

     ;;

'stop')
     sudo chroot . /opt/__run.sh  $*

     if [ ! -f ./dev/1.txt ]; then
     	sudo umount ./dev
     fi

     ;;
*) 
   echo "Usage: $0 { start | stop }" 
   ;;    
esac

exit 0


./run.sh
nohup $CURR_PATH/dnscrypt-proxy -config $CURR_PATH/dnscrypt-proxy.toml 2<&1 &
sh ./run.sh&


$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误


function copy_file_and_symlink(){
fn=$1
targetpath=$2

symlink_fn=`readlink "$fn"`

if [ x$symlink_fn == "x" ]; then
#echo "symlink_fn is empty"
echo "copy -P $fn to $targetpath..."
cp -P $fn $targetpath
exit
fi

if which $symlink_fn >/dev/null; then
echo "copy -P $fn to $targetpath..."
cp -P $fn $targetpath
copy_file_and_symlink $symlink_fn $targetpath
else
echo "copy " $symlink_fn
fi
}

copy_file_and_symlink "./libgthread-2.0.so" "./test"



保留空格
# to preserve backslashes use read -r option.
OLD_IFS="$IFS"
IFS=

echo "" > $tashan_run_sh
while IFS= read line; do
    echo $line >> $tashan_run_sh
done << EOF
#!/bin/bash

if [ ! -L \$0 ]; then
    # if path is not a symlink, find relatively
    CURR_PATH="\$(dirname \$0)"
else
    if which readlink >/dev/null; then
        # if readlink exists, follow the symlink and find relatively
        CURR_PATH="\$(dirname \$(readlink -f \$0))"
    else
        CURR_PATH="\$( cd "\$( dirname "\${BASH_SOURCE[0]}" )" && pwd -P )"
    fi
fi
DISTDIR=\$CURR_PATH

"\$DISTDIR/$lib32name/ld-linux.so.2" --library-path "\$DISTDIR/$lib32name" "\$DISTDIR/$(basename $exefile)"

EOF
IFS="$OLD_IFS"



if [ ! -L $0 ]; then
    # if path is not a symlink, find relatively
    CURR_PATH="$(dirname $0)"
else
    if which readlink >/dev/null; then
        # if readlink exists, follow the symlink and find relatively
        CURR_PATH="$(dirname $(readlink -f $0))"
    else
        CURR_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd -P )"
    fi
fi

#abspath=$(readlink -f $0)
#filepath=$(cd "$(dirname "$abspath")"; pwd)


#!/usr/bin/env bash
#currpath="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd -P )"
currpath=$(cd "$(dirname "$0")"; pwd)
abspath=$(readlink -f $0)
currpath=$(cd "$(dirname "$abspath")"; pwd)

currpath=
$(cd "$(dirname "$0")"; pwd)
parentpath=$(dirname $currpath)
arg0=$1
echo '$1:' $1

if [ x$arg0 == 'x' ]; then
    echo 0
else
    echo 1
fi

#sh ./loop.sh

CURL=`which curl`
echo ${BASH_SOURCE}


状态退出码
Linux通过一个专门的变量$?来保存上一条命令的退出状态码。可以通过打印该变量查看最后一条的命令的退出情况。

    Linux退出状态码及其含义如下所示:

    状态码----------------描述

    0              命令成功结束

    1              一般性位置错误

    2              不适合的shell命令

    126            命令不可执行

    127            没找到命令

    128            无效的退出参数

    128+x          与Linux信号x相关的严重错误

    130            通过Ctrl+C终止的命令

    255            正常范围之外的退出状态码

if-then语句的基本格式
    if command

    then

        commands

    fi

抑或是:

    if command; then

    commands

    fi


请注意后者在待求值的命令尾部增加了分号
if-then-else语句的基本格式
    if command

    then

        commands

    else

        commands

    fi


需要多个if判断逻辑时使用如下命令
    if command1

    then

        commands set 1

    elif command2

    then

        commands set 2

    else

        commands set 3

    fi


test命令
在if-then语句中需要以命令是否成立作为判断条件时用test命令来辅助。

语法:
1.test condition
test命令中的条件成立,test命令将退出并返回状态码0,反之,退出返回非零状态码。
当test命令中的语句为空时,会判定为语句不成立,退出并返回非零状态码。

2.[ condition ]
bash shell 提供了另一种测试方法,也就是test命令的另一种语法。

在if-then语句中将是这样的形态:
    if [ condition ]

    then

        commands

    fi




test命令可以判断的三类条件

□数值比较

□字符串比较

□文件比较
数值比较

        符 号                描述

      n1 -eq n2        n1与n2是否相等

      n1 -ge n2        n1是否大于或等于n2

      n1 -gt n2         n1是否大于n2

      n1 -le n2         n1是否小于或等于n2

      n1 -lt n2          n1是否小于n2

      n1 -ne n2        n1是否不等于n2

这里能处理的是整数和变量:

    #!/bin/bash

    value1=10

    if [ $value1 -gt 5 ]

    then

       echo "The test value $value1 is greater than 5"

    else

       echo "The test value $value1 is smaller than 5"



不能处理浮点数。
字符串比较

        符 号                描述

      str1 = str2        str1是否与str2相同

      str1 != str2        str1是否与str2不同

      str1 < str2         str1是否比str2小

      str1 > str2         str1是否比str2大

        -n str1             str1长度是否非零

        -z str1             str1长度是否为0


文件比较

    符号 描述

    -d file      file是否为一个目录

    -e file      file是否存在

    -f file      file是否存在并是一个文件

    -r file      file是否存在并可读

    -s file      file是否存在并非空

    -w file      file是否存在并可写

    -x file      file是否存在并可执行

    -O file      file是否存在并属当前用户所有

    -G file      file是否存在并且默认组与当前用户相同

    file1 -nt file1  file1是否比file2新

    file1 -ot file1  file1是否比file2旧    #这里的新旧依据是文件的创建时间

 


0 回复 | 直到2022-10-01 00:37添加回复

回复

最近更新

私信给我
生成图片 生成二维码 生成密码
清空