Linux shell脚本进阶使用

-  continue:提前结束某次循环,重新开始下一次

-  break:提前结束某层循环
#求100以内的奇数和
#!/bin/bash
sum=0
for i in seq 100;do
  if [ $[i%2] -ne 0 ];then
    continue
       else
              let sum+=$i
       fi
done
echo $sum
#实现100以内的奇数和
#!/bin/bash
sum=0
for i in seq 100;do  #:命令替换
   if [ $[i%2] -eq 0 ];then  #$[]:shell的算数语法
         let sum+=$i #let工具需要借助一个变量存储计算后的值
        fi
done

echo $sum

每执行一次shift命令,都会左移一次。

#比如有三个参数$1 $2 $3,执行一次shift命令后,$1就删除了,$2变成$1,一次类推。
#!/bin/bash
echo $*
shift
echo $*
shift
echo $*
shift
#输出结果:
[root@Centos8 ~]# bash shift.sh 1 2 3 4 5
1 2 3 4 5
2 3 4 5
3 4 5
#利用shift的方式批量创建账号
#!/bin/bash

if [$# -eq 0];then  #判断位置参数是否是0
    echo "请输入需要创建的用户"
    exit
fi

while [ "$1"  ] ;do #[ "$1"  ]:判断$1是否为空,只写字符串就表示字符串不为空,为真
    if id $1 &> /dev/null; then  #如果id命令执行的结果为真($?=0)就表示用户存在了
        echo "$1 is exist"
    else
        useradd $1
        echo "$1 is create"
    fi
    shift
done
echo "all user is create "

#使用for的形式创建账号
if [$# -eq 0];then  #判断位置参数是否是0
    echo "请输入需要创建的用户"
    exit
fi

for user in $*;do
if id $user &> /dev/null; then  #如果id命令执行的结果为真($?=0)就表示用户存在了
        echo "$user is exist"
    else
        useradd $user
        echo "$user is create"
    fi
done
echo "all user is create "

文本的逐行处理。

while read line; do
 循环体
done < /PATH/FROM/SOMEFILE
while read line ;do echo $line; done #&#x6807;&#x51C6;&#x8F93;&#x5165;&#xFF0C;&#x9010;&#x884C;&#x5904;&#x7406;

while read line ; do xxxx; done < filename #&#x53EF;&#x4EE5;&#x5229;&#x7528;&#x6807;&#x51C6;&#x8F93;&#x5165;&#x91CD;&#x5B9A;&#x5411;&#x628A;&#x6587;&#x4EF6;&#x4F20;&#x7ED9;&#x5B83;

cat /etc/issue | while read line ;do echo $line; done #&#x7528;&#x7BA1;&#x9053;

#&#x4F7F;&#x7528;while read&#x5224;&#x65AD;&#x78C1;&#x76D8;&#x5206;&#x533A;&#x78C1;&#x76D8;&#x7684;&#x5229;&#x7528;&#x7387;
#!/bin/bash

while true ; do #&#x4E00;&#x76F4;&#x6267;&#x884C;
   df | sed -nr '/^\/dev\/sd/ s#([^ ]+).*([0-9]+)%.*#\1 \2#p' | while read  DEV USE;do
   if [ $USE -gt 80 ];then
     echo "$DEV will be full, USE: $USE"
   else
     echo "$DEV is health, USE: $USE"
   fi
   done
sleep 2 #&#x6BCF;&#x4E24;&#x79D2;&#x6267;&#x884C;&#x4E00;&#x6B21;
done

#sed -nr '/^\/dev\/sd/ s#(^[^ ]+).*([0-9]+)%.*#\1 \2#p' | while read  DEV USE;do
#/^\/dev\/sd/ --- &#x4EE5;&#x4E3A;/dev/sd&#x5F00;&#x5934;&#x7684;(&#x975E;&#x7A7A;&#x683C;&#x7684;&#x5185;&#x5BB9;)
#[^ ]+ :&#x53D6;&#x51FA;&#x5206;&#x533A;&#x7684;&#x8BBE;&#x5907;&#xFF0C;&#x975E;&#x7A7A;&#x683C;&#xFF0C;&#x4E00;&#x4E2A;&#x4EE5;&#x4E0A;&#x7684;&#x5B57;&#x7B26;
#\1 \2 --- &#x540E;&#x9879;&#x66FF;&#x6362;
#&#x67E5;&#x770B;/sbin/nologin&#x7684;shell&#x7C7B;&#x578B;&#x7684;&#x7528;&#x6237;&#x540D;&#x548C;UID
#!/bin/bash
while read line ; do #&#x901A;&#x8FC7;&#x8F93;&#x5165;&#x91CD;&#x5B9A;&#x5411;&#x7684;&#x65B9;&#x5F0F;&#x9010;&#x884C;&#x5904;&#x7406;&#x5185;&#x5BB9;
    if [[ $line =~ /sbin/nologin$  ]];then # [[ =~ ]]:&#x4F1A;&#x628A;&#x4F1A;&#x628A;&#x53F3;&#x8FB9;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x5F53;&#x6210;&#x6B63;&#x5219;
        echo $line | cut -d: -f1,3 # -d&#xFF1A;&#x6307;&#x5B9A;&#x5206;&#x9694;&#x7B26; -f&#xFF1A;&#x53D6;&#x90A3;&#x51E0;&#x5217;
        fi
done < /etc/passwd

帮助我们生成菜单的角色。

[En]

Help us generate the role of the menu.

#&#x8BED;&#x6CD5;&#x548C;for&#x7684;&#x8BED;&#x6CD5;&#x5F88;&#x7C7B;&#x4F3C;
select &#x53D8;&#x91CF; in &#x5217;&#x8868; ;do
    &#x6240;&#x4F5C;&#x7684;&#x64CD;&#x4F5C;
done

#PS3&#x7528;&#x4E8E;&#x8F93;&#x51FA;&#x63D0;&#x793A;&#x4FE1;&#x606F;&#xFF0C;&#x6548;&#x679C;&#x7B49;&#x540C;&#x4E8E; read -p
#&#x8F93;&#x5165;&#x7684;&#x4FE1;&#x606F;&#x4FDD;&#x5B58;&#x5230;&#x7F6E;&#x53D8;&#x91CF;REPLY&#x4E2D;
#select &#x662F;&#x4E2A;&#x65E0;&#x9650;&#x5FAA;&#x73AF;&#xFF0C;&#x56E0;&#x6B64;&#x8981;&#x7528; break &#x547D;&#x4EE4;&#x9000;&#x51FA;&#x5FAA;&#x73AF;

#PS1&#xFF1A;&#x662F;&#x5F71;&#x54CD;&#x6211;&#x4EEC;&#x5F53;&#x524D;&#x63D0;&#x7B26;&#x7684;
#PS2&#xFF1A;&#x5F71;&#x54CD;&#x591A;&#x884C;&#x591A;&#x5B9A;&#x5411;&#xFF08;<<)提示符的 echo $ps2--> >
</)提示符的>
#&#x5217;&#x8868;&#x5C31;&#x662F;&#x7528;&#x6765;&#x751F;&#x6210;&#x83DC;&#x5355;&#x7684;
PS3="&#x8BF7;&#x9009;&#x62E9;&#x529F;&#x80FD;(1-5):" #PS3&#xFF1A;&#x66F4;&#x6539;&#x83DC;&#x5355;&#x7684;&#x63D0;&#x793A;&#x4FE1;&#x606F;
select list in &#x5347;&#x7EA7;&#x8F6F;&#x4EF6; &#x5907;&#x4EFD;&#x6570;&#x636E;&#x5E93; &#x56DE;&#x6EDA;&#x8F6F;&#x4EF6; &#x5220;&#x5E93;&#x8DD1;&#x8DEF; ; do
    echo $REPLY;
done
#!/bin/bash

PS3="&#x8BF7;&#x8F93;&#x5165;&#x5BF9;&#x5E94;&#x9009;&#x9879;&#xFF08;1-5&#xFF09;: "

select menu in &#x5B89;&#x88C5; &#x5347;&#x7EA7; &#x914D;&#x7F6E; &#x5378;&#x8F7D;;do
       case $REPLY in
       1)
           echo "install"
           ;;
       2)
           echo "update"
           ;;
       3)
           echo "config"
           ;;
       4)
           echo "remove"
           ;;
       *)
           echo "No this select"
           ;;
        esac
done

&#x51FD;&#x6570;&#x540D; &#xFF08;&#xFF09;
{
    &#x51FD;&#x6570;&#x4F53;
}
&#x6216;
function &#x51FD;&#x6570;
{
    &#x51FD;&#x6570;&#x4F53;
}
#&#x5199;&#x4E86;function&#x5173;&#x952E;&#x8BCD;&#xFF0C;&#x53EF;&#x4EE5;&#x7701;&#x7565;&#x51FD;&#x6570;&#x540D;&#x540E;&#x9762;&#x7684;&#x62EC;&#x53F7;

在出现函数名称的位置,它将自动替换为函数代码

[En]

Where the function name appears, it is automatically replaced with the function code

[root@centos8 ~]#dir() {
> ls -l
> }
[root@centos8 ~]#dir  #&#x8C03;&#x7528;&#x51FD;&#x6570;
total 4
 . filename &#x6216; source &#xA0;filename #.&#x548C;source&#x7B49;&#x4EF7;
&#x4F7F;&#x7528;echo&#x7B49;&#x547D;&#x4EE4;&#x8FDB;&#x884C;&#x8F93;&#x51FA;

&#x51FD;&#x6570;&#x4F53;&#x4E2D;&#x8C03;&#x7528;&#x547D;&#x4EE4;&#x7684;&#x8F93;&#x51FA;&#x7ED3;&#x679C;

也是用$n等来实现的。

#1. &#x53D6;&#x51B3;&#x4E8E;&#x6700;&#x540E;&#x4E00;&#x5929;&#x547D;&#x4EE4;&#x7684;&#x72B6;&#x6001;&#x7801;

#2. &#x81EA;&#x5B9A;&#x4E49;&#x72B6;&#x6001;&#x7801;&#xFF1A; retuen num #0&#xFF1A;&#x65E0;&#x9519;&#x8BEF;&#x8FD4;&#x56DE;&#xFF0C;1-255&#xFF1A;&#x6709;&#x9519;&#x8BEF;&#x8FD4;&#x56DE;
&#x666E;&#x901A;&#x53D8;&#x91CF;&#xFF1A;&#x53D8;&#x91CF;&#x540D;="&#x503C;" #&#x53EA;&#x80FD;&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x4F7F;&#x7528;

&#x73AF;&#x5883;&#x53D8;&#x91CF;&#xFF1A;export &#x53D8;&#x91CF;&#x540D;="&#x503C;" #&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x548C;&#x5B50;&#x8FDB;&#x7A0B;&#x90FD;&#x80FD;&#x4F7F;&#x7528;

&#x672C;&#x5730;&#x53D8;&#x91CF;&#xFF1A; local &#x53D8;&#x91CF;&#x540D;="&#x503C;" #&#x9650;&#x5B9A;&#x4E86;&#x53D8;&#x91CF;&#x5728;&#x51FD;&#x6570;&#x4E2D;&#x6709;&#x6548;&#xFF0C;&#x5BF9;&#x5916;&#x90E8;&#x7684;&#x4E0D;&#x5F71;&#x54CD;
#&#x5224;&#x65AD;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7C7B;&#x578B;&#x5B89;&#x88C5;&#x8F6F;&#x4EF6;
#!/bin/bash
os_type
{
if   cat /etc/os-release | grep -i -q "ubuntu" ; then  # -q&#xFF1A;&#x4E0D;&#x663E;&#x793A;&#x67E5;&#x627E;&#x7684;&#x7ED3;&#x679C;&#xFF0C;&#x4E0D;&#x7BA1;&#x627E;&#x5230;&#x4E0E;&#x5426;
    echo "ubuntu"
elif  cat /etc/os-release | grep -E "centos" ;then
    echo "centos"
else
    echo "no find ubuntu or centos"
fi
}
if [ os_type = centos ] ;then #&#x5B57;&#x7B26;&#x4E32;&#x7528;= != < > &#x7B49; &#xFF08;&#x5224;&#x65AD;&#x7B26;&#x53F7;&#x4E24;&#x8FB9;&#x9700;&#x8981;&#x52A0;&#x4E0A;&#x7A7A;&#x683C;&#xFF09;
    yum install httpd -y
elif [ os_type = ubuntu ] ; then
    apt install httpd -y
else
    echo "nofind centos or ubuntu"
#&#x7C97;&#x7565;&#x5224;&#x65AD;ip&#x683C;&#x5F0F;&#x662F;&#x5426;&#x5408;&#x6CD5;
##/bin/bash
is_ip ()
{
   if   [[ "$1" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$  ]] ;then
      echo "$1 is valid"
   else
      echo "$1 is not valid"
  fi
}
is_ip $1  #&#x7ED9;&#x51FD;&#x6570;&#x4F20;&#x9012;&#x53C2;&#x6570;

trap:陷阱,用于捕获信号的

使用trap -l可以查看

CTRL+C:&#x53D1;&#x9001;&#x7684;&#x5C31;&#x662F;2&#xFF08;SIGINT&#xFF09;&#x4FE1;&#x53F7;&#xFF0C;&#x7A0B;&#x5E8F;&#x6536;&#x5230;&#x8FD9;&#x4E2A;&#x4FE1;&#x53F7;&#x4EE5;&#x540E;&#x5C31;&#x4F1A;&#x9000;&#x51FA;&#x3002;

通过trap指令来完成:

#&#x683C;&#x5F0F;&#xFF1A;
#&#x901A;&#x8FC7;&#x6355;&#x83B7;&#x4FE1;&#x53F7;&#x6765;&#x4FEE;&#x6539;&#x4FE1;&#x53F7;&#x7684;&#x539F;&#x6709;&#x529F;&#x80FD;
trap '&#x6355;&#x83B7;&#x5230;&#x4FE1;&#x53F7;&#x4EE5;&#x540E;&#x8981;&#x505A;&#x7684;&#x4E8B;'  &#x4FE1;&#x53F7; #&#x4FE1;&#x53F7;&#x53EF;&#x4EE5;&#x662F;&#x5168;&#x79F0;&#x3001;&#x7F29;&#x5199;&#x6216;&#x8005;&#x524D;&#x9762;&#x7684;&#x6570;&#x5B57;&#x6807;&#x53F7;

&#x4F8B;&#x5982;&#xFF1A;
trap '' &#x4FE1;&#x53F7; #&#x5FFD;&#x7565;&#x4FE1;&#x53F7;&#x64CD;&#x4F5C;
trap '-' &#x4FE1;&#x53F7; #&#x6062;&#x590D;&#x4FE1;&#x53F7;&#x539F;&#x6709;&#x7684;&#x529F;&#x80FD;
&#x5E0C;&#x671B;&#x521B;&#x5EFA;&#x7684;&#x4E34;&#x65F6;&#x6587;&#x4EF6;&#x548C;&#x73B0;&#x6709;&#x6587;&#x4EF6;&#x4E0D;&#x51B2;&#x7A81;

#&#x521B;&#x5EFA;&#x4E34;&#x65F6;&#x6587;&#x4EF6;&#x7684;&#x683C;&#x5F0F;
mktemp [&#x9009;&#x9879;] [&#x6A21;&#x677F;]  #&#x6A21;&#x677F;&#x5C31;&#x662F;&#x4E34;&#x65F6;&#x6587;&#x4EF6;&#x7684;&#x6587;&#x4EF6;&#x540D;
#&#x6A21;&#x677F;&#x683C;&#x5F0F;&#xFF1A; filenameXXX&#xFF0C;&#x6587;&#x4EF6;&#x524D;&#x7F00;+&#x4E09;&#x4E2A;&#x968F;&#x673A;&#x5B57;&#x7B26;&#xFF08;X&#xFF08;&#x5927;&#x5199;&#xFF09;&#x81F3;&#x5C11;&#x8981;&#x51FA;&#x73B0;&#x4E09;&#x4E2A;&#xFF09;

&#x4F8B;&#x5982;&#xFF1B;mktemp fileXXX --->file90X
#&#x9009;&#x9879;&#xFF1A;

-d&#xFF1A;&#x521B;&#x5EFA;&#x4E34;&#x65F6;&#x76EE;&#x5F55;&#x6587;&#x4EF6;
-p&#xFF1A;&#x6307;&#x5B9A;&#x521B;&#x5EFA;&#x7684;&#x4F4D;&#x7F6E;
#&#x901A;&#x8FC7;&#x521B;&#x5EFA;&#x4E34;&#x65F6;&#x6587;&#x4EF6;&#xFF0C;&#x5B9E;&#x73B0;&#x6587;&#x4EF6;&#x5783;&#x573E;&#x7BB1;&#xFF08;&#x628A;&#x4E0D;&#x7528;&#x7684;&#x6587;&#x4EF6;&#x79FB;&#x52A8;&#x5230;&#x4E00;&#x4E2A;&#x76EE;&#x5F55;&#x91CC;&#x9762;&#xFF09;
DIR=mktemp -d /tmp/trash-$(date +%F_%H-%M-%S)XXXXXX #&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x4E34;&#x65F6;&#x76EE;&#x5F55;&#x6587;&#x4EF6;
mv $* $DIR # $*:&#x8868;&#x793A;&#x6240;&#x6709;&#x4F4D;&#x7F6E;&#x7684;&#x53C2;&#x6570;
echo $* is move to $DIR

install命令可以改权限、拷贝、创建文件夹等

#&#x7F16;&#x8BD1;&#x5B89;&#x88C5;make install&#xFF1A;&#x628A;make&#x547D;&#x4EE4;&#x6267;&#x884C;&#x7684;&#x7F16;&#x8BD1;&#x7684;&#x7ED3;&#x679C;&#x590D;&#x5236;&#x5230;&#x5BF9;&#x5E94;&#x7684;&#x6587;&#x4EF6;&#x4E2D;&#x3002;make install &#x8C03;&#x7528;&#x4E86;install&#x547D;&#x4EE4;
#install &#x7684;&#x7528;&#x6CD5;&#xFF08;&#x548C;cp&#x547D;&#x4EE4;&#x5F88;&#x7C7B;&#x4F3C;&#xFF09;

#&#x9009;&#x9879;
-m MODE&#xFF0C;&#x9ED8;&#x8BA4;755&#xFF0C;&#x4FEE;&#x6539;&#x6743;&#x9650;
-o OWNER&#xFF0C;&#x6307;&#x5B9A;&#x6240;&#x6709;&#x8005;
-g GROUP&#xFF0C;&#x6307;&#x5B9A;&#x6240;&#x6709;&#x7EC4;
-d DIRNAME &#x76EE;&#x5F55;&#xFF0C;&#x521B;&#x5EFA;&#x76EE;&#x5F55;&#x6587;&#x4EF6;

##&#x4F8B;&#x5982;
install -m 770 -d /testdir/installdir #&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x6743;&#x9650;&#x4E3A;770&#x7684;&#x6587;&#x4EF6;&#x5939;&#xFF08;install -d &#x76F8;&#x5F53;&#x4E8E; mkdir -p&#xFF09;

install -m 700 -o tom -g root /etc/issue /etc/xx.txt #&#x590D;&#x5236;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x5230;&#x6307;&#x5B9A;&#x4F4D;&#x7F6E;&#xFF0C;&#x590D;&#x5236;&#x7684;&#x65F6;&#x5019;&#x66F4;&#x6539;&#x4E86;&#x6743;&#x9650;

把交互式的命令变成非交互式的。(espect通过对指定命令的监控,出现对应关键字的时候执行对应操作)

#expect&#x4E2D;&#x76F8;&#x5173;&#x547D;&#x4EE4;&#xFF1A;
spawn &#x76D1;&#x63A7;&#x67D0;&#x4E00;&#x4E2A;&#x547D;&#x4EE4;&#x7684;&#x6267;&#x884C;
expect &#x6355;&#x83B7;&#x7279;&#x5B9A;&#x7684;&#x5B57;&#x7B26;&#x4E32;
send  &#x6355;&#x83B7;&#x5230;&#x8FD9;&#x4E2A;&#x7279;&#x5B9A;&#x5B57;&#x7B26;&#x4E32;&#x540E;&#xFF0C;&#x53D1;&#x9001;&#x5BF9;&#x5E94;&#x4FE1;&#x606F;
interact &#x5141;&#x8BB8;&#x7528;&#x6237;&#x4EA4;&#x4E92;
exp_continue &#x5339;&#x914D;&#x591A;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x5728;&#x6267;&#x884C;&#x52A8;&#x4F5C;&#x540E;&#x52A0;&#x6B64;&#x547D;&#x4EE4;
#&#x5339;&#x914D;&#x5230;hi&#x540E;&#xFF0C;&#x4F1A;&#x8F93;&#x51FA;&#x201C;you said hi&#x201D;&#xFF0C;&#x5E76;&#x6362;&#x884C;
 expect "hi" {send "You said hi\n"} #&#x6355;&#x83B7;&#x5C4F;&#x5E55;&#x4E0A;&#x662F;&#x5426;&#x6709;hi&#xFF0C;&#x5982;&#x679C;&#x6709;&#x5C31;&#x81EA;&#x52A8;&#x6253;&#x5370;xx

数组:多个变量的集合

bash&#x7684;&#x6570;&#x7EC4;&#x652F;&#x6301;&#x7A00;&#x758F;&#x683C;&#x5F0F; #&#x7D22;&#x5F15;&#x4E0D;&#x8FDE;&#x7EED;&#x5C31;&#x53EB;&#x505A;&#x7A00;&#x758F;&#x683C;&#x5F0F;
&#x5EFA;&#x8BAE;&#x5148;&#x58F0;&#x660E;&#x518D;&#x4F7F;&#x7528;&#x3002;
#&#x58F0;&#x660E;&#x6570;&#x7EC4;&#xFF1A;
declare -a &#x6570;&#x636E;&#x540D; #&#x7533;&#x660E;&#x4E3A;&#x666E;&#x901A;&#x6570;&#x7EC4;
declare -A &#x6570;&#x7EC4;&#x540D; #&#x7533;&#x660E;&#x4E3A;&#x5173;&#x8054;&#x6570;&#x7EC4; #&#x7BA1;&#x7406;&#x6570;&#x7EC4;&#x5FC5;&#x987B;&#x7533;&#x660E;&#x540E;&#x518D;&#x4F7F;&#x7528;&#xFF0C;&#x4E14;&#x5173;&#x8054;&#x548C;&#x666E;&#x901A;&#x4E0D;&#x80FD;&#x8F6C;&#x6362;

#&#x58F0;&#x660E;&#x53D8;&#x91CF;
&#x65E2;&#x7136;&#x6240;&#x6709;&#x53D8;&#x91CF;&#x7684;&#x9ED8;&#x8BA4;&#x7C7B;&#x578B;&#x662F;&#x5B57;&#x7B26;&#x4E32;&#x578B;&#xFF0C;&#x90A3;&#x4E48;&#x53EA;&#x8981;&#x6211;&#x4EEC;&#x628A;&#x53D8;&#x91CF;&#x58F0;&#x660E;&#x4E3A;&#x6574;&#x6570;&#x578B;&#x5C31;&#x53EF;&#x4EE5;&#x8FDB;&#x884C;&#x8FD0;&#x7B97;&#x4E86;&#xFF0C;
&#x5B9A;&#x4E49;&#x53D8;&#x91CF;b&#x5E76;&#x8D4B;&#x503C;&#x4E3A;3&#xFF0C;&#x5177;&#x6709;&#x6574;&#x578B;&#x5C5E;&#x6027;&#x3002; declare -i x=3
#&#x5355;&#x4E2A;&#x5143;&#x7D20;&#x8D4B;&#x503C; &#x6570;&#x7EC4;&#x540D;[&#x7D22;&#x5F15;]=&#x503C;
#&#x4F8B;&#x5982;&#xFF1A;weekdays[0]="Sunday"

#&#x4E00;&#x6B21;&#x5168;&#x90E8;&#x8D4B;&#x503C;&#xFF1A;&#x6570;&#x7EC4;&#x540D;=(v1,v2...vn)
#&#x8303;&#x4F8B;&#xFF1A;title=("ceo" "coo" "cto")  #&#x4F7F;&#x7528;&#x7A7A;&#x683C;&#x4F5C;&#x4E3A;&#x5206;&#x9694;&#x7B26;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x9017;&#x53F7;
${&#x6570;&#x7EC4;&#x540D;[&#x7D22;&#x5F15;]}

#&#x5F15;&#x7528;&#x6570;&#x7EC4;&#x6240;&#x6709;&#x5143;&#x7D20;
${ARRAY_NAME[*]}&#x6216;${ARRAY_NAME[@]}

#&#x5220;&#x9664;&#x6570;&#x7EC4;&#x4E2D;&#x7684;&#x67D0;&#x4E00;&#x4E2A;&#x5143;&#x7D20;
unset &#x6570;&#x7EC4;&#x540D;[&#x7D22;&#x5F15;]

#&#x5220;&#x9664;&#x6574;&#x4E2A;&#x6570;&#x7EC4;
unset &#x6570;&#x7EC4;&#x540D;

下标不是默认的数字0..n,而是自定义的。

&#x6570;&#x7EC4;&#x540D;[&#x81EA;&#x5B9A;&#x4E49;&#x7684;&#x4E0B;&#x6807;]=&#x503C;
#&#x4F8B;&#x5982;&#xFF1A; aa[name1]=bob  --- echo ${aa[name1]}--->bob
#&#x968F;&#x673A;&#x751F;&#x6210;&#x5341;&#x4E2A;&#x6570;&#x5B57;&#xFF0C;&#x627E;&#x51FA;&#x6700;&#x5927;&#x7684;&#x548C;&#x6700;&#x5C0F;&#x7684;
#!/bin/bash
max=0
min=0
declare -a arr #&#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#x6570;&#x7EC4;&#x7528;&#x4E8E;&#x5B58;&#x50A8;&#x751F;&#x6210;&#x7684;&#x662F;&#x4E2A;&#x968F;&#x673A;&#x6570;
i=0
while [ $i -le 10 ];do
    arr[$i]=$RANDOM #&#x7ED9;&#x6570;&#x7EC4;&#x8D4B;&#x503C;
    if [ $i -eq 0 ];then #&#x628A;&#x7B2C;&#x4E00;&#x4E2A;&#x6570;&#x4F5C;&#x4E3A;&#x57FA;&#x51C6;&#x6765;&#x5224;&#x65AD;&#x540E;&#x7EED;&#x6570;&#x7684;&#x5927;&#x5C0F;
        max=${arr[$i]}
        min=${arr[$i]}
        else
        if [ ${arr[$i]} -gt $max ];then
            max=${arr[$i]}
        fi
        if [ ${arr[$i]} -lt $min ];then
            min=${arr[$i]}
        fi
    fi
  let i++ #let&#x5DE5;&#x5177;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x53D8;&#x91CF;&#x6765;&#x63A5;&#x53D7;&#x53D8;&#x91CF;&#x7684;&#x503C;
done
echo "max is : $max , min is $min"

取下一根绳子的一部分。

[En]

Take out part of a string.

#&#x6570;&#x7EC4;&#x4E2D;&#x663E;&#x793A;&#x6570;&#x7EC4;&#x5143;&#x7D20;&#x7684;&#x4E2A;&#x6570;&#xFF1A;
${#&#x6570;&#x7EC4;&#x540D;}
#&#x83B7;&#x53D6;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x957F;&#x5EA6;
${#var}
&#x4F8B;&#x5982;&#xFF1A;str=jkfjafasfa --->10

#&#x8DF3;&#x8FC7;&#x5B57;&#x7B26;&#x4E32;&#x5DE6;&#x8FB9;&#x7684;&#x51E0;&#x4E2A;
${var:num} #num&#xFF1A;&#x8868;&#x793A;&#x9700;&#x8981;&#x8DF3;&#x8FC7;&#x51E0;&#x4E2A;
#&#x8DF3;&#x8FC7;&#x5B57;&#x7B26;&#x4E32;&#x5DE6;&#x8FB9;&#x7684;&#x51E0;&#x4E2A;&#xFF0C;&#x4FDD;&#x7559;&#x591A;&#x5C11;&#x4E2A;
${var:offset:number} #number&#x8868;&#x793A;&#x8981;&#x4FDD;&#x7559;&#x7684;&#x957F;&#x5EA6;

#&#x5220;&#x5DE6;&#x7559;&#x53F3;&#x8FB9;
${var#*word} #&#x4ECE;&#x5DE6;&#x8FB9;&#x5F00;&#x59CB;&#x627E;&#xFF0C;&#x4E00;&#x76F4;&#x627E;&#x5230;word&#x540E;&#xFF0C;&#x5C31;&#x628A;&#x4ED6;&#x4EEC;&#x90FD;&#x5220;&#x9664;&#x6389;&#xFF08;&#x61D2;&#x60F0;&#x6A21;&#x5F0F;&#xFF09;
${var##*word} #&#x4ECE;&#x5DE6;&#x8FB9;&#x5F00;&#x59CB;&#x627E;&#xFF0C;&#x4E00;&#x76F4;&#x627E;&#x5230;&#x6700;&#x53F3;&#x8FB9;&#x7684;word&#x540E;&#xFF0C;&#x5C31;&#x628A;&#x4ED6;&#x4EEC;&#x90FD;&#x5220;&#x9664;&#x6389;&#xFF08;&#x8D2A;&#x5A6A;&#x6A21;&#x5F0F;&#xFF09;
#&#x8303;&#x4F8B;&#xFF1A;
file="var/log/messages" ---echo ${file#*/}-->log/messages

#&#x66FF;&#x6362;&#x7B2C;&#x4E00;&#x6B21;&#x5339;&#x914D;&#x5230;&#x7684;
${var/pattern/substr}

#&#x66FF;&#x6362;&#x6240;&#x6709;&#x5339;&#x914D;&#x5230;&#x7684;
${var//pattern/substr}
#&#x5220;&#x9664;&#x6389;&#x7B2C;&#x4E00;&#x6B21;&#x627E;&#x5230;&#x7684;
${var/pattern}

#&#x5220;&#x9664;&#x6240;&#x6709;&#x627E;&#x7684;&#x7684;
${var/pattern}

Original: https://www.cnblogs.com/heyongshen/p/16472084.html
Author: 背对背依靠
Title: Linux shell脚本进阶使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523116/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球