php遍历字符串-Shell 快速参考指南

2023-08-29 0 7,424 百度已收录

 declare -A asso_array1
 declare -A asso_array2
 declare -A asso_array3

相关字段参数

 # 数组名[索引or下标]=变量值
 asso_array1[linux]=one
 asso_array1[java]=two
 asso_array1[php]=three

 asso_array2=([name1]=harry [name2]=jack [name3]=amy [name4]="Miss Hou")

 declare -A asso_array1='([php]="three" [java]="two" [linux]="one")'
 declare -A asso_array2='([name3]="amy" [name2]="jack" [name1]="harry" [name4]="Miss Hou")'
 declare -A | egrep "asso_array[12]"

 echo ${asso_array1[linux]}  # 获取索引为liunx的值
 one
 echo ${asso_array1[*]}      # 获取数组值
 three two one
 echo ${!asso_array1[*]}     # 获取数组索引
 php java linux
 echo ${#asso_array1[*]}     # 获取数组元素个数
 3

 declare -A books
 declare -A | grep books
 let books[linux]++
 declare -A | grep books

条件判断

句子格式

判断[]和[[]]中的变量需要加双冒号

1.确定文件类型

判断参数

意义

-e

确定文件是否存在(任何类型的文件)

-F

判断文件是否存在并且是普通文件

-d

判断文件是否存在并且是目录

-L

判断文件是否存在且是软链接文件

-b

判断文件是否存在并且是块设备文件

-S

判断文件是否存在并且是套接字文件

-C

判断文件是否存在并且是字符设备文件

-p

确定文件是否存在并且是命名管道文件

-s

判断文件是否存在且为非空文件(有内容)

与其他判断条件结合,则表示否定

例如

 test -e file                # 只要文件存在条件为真
 [ -d /shell01/dir1 ]        # 判断目录是否存在,存在条件为真
 [ ! -d /shell01/dir1 ]      # 判断目录是否存在,不存在条件为真
 [[ -f /shell01/1.sh ]]      # 判断文件是否存在,并且是一个普通的文件

2.确定文件权限

判断参数

意义

-r

当前用户是否可以读取

-w

当前用户是否可以写入

-X

当前用户是否可以执行

-u

是否有suid、中级权限风险位

-G

是否sgid、中级权限强制位

-k

是否有位,中间权限粘性位

3.判断文件是新的还是旧的

说明:这里的old和new指的是文件的更改时间

判断参数

意义

文件1-nt文件2

比较file1是否比file2新

文件1-ot文件2

比较file1是否比file2旧

文件1-ef文件2

比较是否是同一个文件,或者用来判断硬链接是否指向同一个inode

4、判断值

[] 和 test 中使用的比较符号

(()) 和 [[]] 中使用的比较符号

意义

-eq

==或=

平等的

-ne

!=

范围

-gt

少于

-lt

小于或等于

-le

=!=物理符号

要在[]中使用物理比较符号,需要添加传送符号

 [ 1 > 2 ] && echo yes || echo no

5.确定字符

判断参数

意义

-z

判断是否为空字符串,如果字符串宽度为0php遍历字符串,则创建

-n

判断是否为非空字符串,如果字符串宽度不为0,则创建

字符串1=字符串2

检查字符串是否相等

字符串1!=字符串2

检查字符串是否相等

6. 逻辑运算符

[] 和 test 中使用的运算符

[[ ]] 和 (()) 中使用的运算符

意义

例子

-A

&&

[1-eq1-a1-ne0][1-eq1]&&[1-ne0]

-o

||

或者,或者

[1-eq1-o1-ne1]

不是这样的

[!1-eq1]

例如

 [ $(id -u) -eq 0 ] && echo "the user is admin"
 [ $(id -u) -ne 0 ] && echo "the user is not admin"
 [ $(id -u) -eq 0 ] && echo "the user is admin" || echo "the user is not admin"
 
 uid=`id -u`
 test $uid -eq 0 && echo this is admin
 [ $(id -u) -ne 0 ]  || echo this is admin
 [ $(id -u) -eq 0 ]  && echo this is admin || echo this is not admin
 [ $(id -u) -eq 0 ]  && echo this is admin || echo this is not admin
 [[ 1 -eq 1 && 1 -ne 0 ]] && echo yes || echo no    # yes
 [[ ! 1 -eq 1 && 1 -ne 0 ]] && echo yes || echo no  # no

 # 注意:在(( ))中,=表示赋值;==表示判断
 ((1==2));echo $?
 ((1=1));echo $?
 ((2!=1));echo $?
 ((`id -u`==0));echo $?
 ((a=123));echo $a
 unset a
 ((a==123));echo $?

 # 注意:双引号引起来,看作一个整体;= 和 == 在 [ 字符串 ] 比较中都表示判断
 a='hello world';b=world
 [ $a = $b ];echo $?
 [ "$a" = "$b" ];echo $?
 [ "$a" != "$b" ];echo $?
 [ "$a" == "$b" ];echo $?
 test "$a" != "$b";echo $?
 test -z $a;echo $?
 a=hello
 test -z $a;echo $?
 test -n $a;echo $?
 test -n "$a";echo $?
 [ '' = $a ];echo $?
 [[ '' = $a ]];echo $?
 [ 1 -eq 0 -a 1 -ne 0 ];echo $?
 [ 1 -eq 0 && 1 -ne 0 ];echo $?
 [[ 1 -eq 0 && 1 -ne 0 ]];echo $?

判断语句1.if结构

 if [ condition ];then
     command
     command
 fi
 
 if test 条件;then
     命令
 fi
 
 if [[ 条件 ]];then
     命令
 fi
 
 [ 条件 ] && command

2.if...else结构

 if [ condition ];then
     command1
 else
     command2
 fi
 
 [ 条件 ] && command1 || command2

3.if...elif...else结构

 if [ condition1 ];then
     command1
 elif [ condition2 ];then
     command2
 else
     command3
 fi

4.if嵌套结构

 if [ condition1 ];then
     command1        
     if [ condition2 ];then
         command2
     fi
 else
     if [ condition3 ];then
         command3
     elif [ condition4 ];then
         command4
     else
         command5
     fi
 fi

5.案例句

case为多个匹配语句,如果匹配成功,则执行匹配命令

句子的结构

 # 说明:pattern表示需要匹配的模式
 case var in           # 定义变量;var代表是变量名
 pattern 1)            # 模式1;用 | 分割多个模式,相当于or
     command1          # 需要执行的语句
     ;;                # 两个分号代表命令结束
 pattern 2)
     command2
     ;;
 pattern 3)
     command3
     ;;
         *)            # default,不满足以上模式,默认执行*)下面的语句
     command4
     ;;
 esac                  # esac表示case语句结束

应用领域

 # 脚本提示让用户输入需要管理的服务名,然后提示用户需要对服务做什么操作,如启动,关闭等操作
 #!/bin/env bash
 read -p "请输入你要管理的服务名称(vsftpd):" service
 case $service in
         vsftpd|ftp)
         read -p "请选择你需要做的事情(restart|stop):" action
         case $action in
                 stop|S)
                 service vsftpd stop &>/dev/null && echo "该$serivce服务已经停止成功"
                 ;;
                 start)
                 service vsftpd start &>/dev/null && echo "该$serivce服务已经成功启动"
                 ;;
         esac
         ;;
         httpd|apache)
         echo "apache hello world"
         ;;
         *)
         echo "请输入你要管理的服务名称"
         ;;
 esac

循环语句1.for循环

用于执行一组命令已知次数

1)列表循环

 for variable in {list}
      do
           command 
           command
           …
      done
 # 或者
 for variable in a b c
      do
          command
          command
      done

 for var in {1..10};do echo $var;done
 for var in 1 2 3 4 5;do echo $var;done
 for var in `seq 10`;do echo $var;done
 for var in {0..10..2};do echo $var;done
 for var in {2..10..2};do echo $var;done
 for var in {10..1};do echo $var;done
 for var in {10..1..-2};do echo $var;done
 for var in `seq 10 -2 1`;do echo $var;done

2)C型循环

 for(( expr1; expr2; expr3 ))
     do
         command
         command
         …
     done
 # expr1:定义变量并赋初值
 # expr2:决定是否进行循环(条件)
 # expr3:决定循环变量如何改变,决定循环什么时候退出
 for (( i=1;i<=5;i++))
     do
         echo $i
     done

 for ((i=2;i<=10;i+=2));do echo $i;done
 # 计算1-100奇数和
 sum=0
 for i in {1..100..2}
 do
     sum=$[$i+$sum]
 done
 echo "1-100的奇数和为:$sum"
 # 或者
 sum=0
 for ((i=1;i<=100;i+=2))
 do
     let sum=$i+$sum
 done
 echo "1-100的奇数和为:$sum"

2. while 循环

如果条件为 true 则进入循环,如果条件为 false 则退出循环

 while 表达式
 do
     command...
 done
 # 或者
 while  [ $i -eq 1 ] 或者 (( $i == 1 ))
 do
     command
     command
    ...
 done

 # 循环打印1-5数字
 i=1
 while (($i<=5))
 do
     echo $i
     let i++
 done
 
 # 计算1-50偶数和
 sum=0
 i=2
 while [ $i -le 50 ]
 do
     let sum=sum+i
     let i+=2
 done
 echo "1-50的偶数和为:$sum"

3.直到循环

如果条件为假则进入循环,如果条件为真则退出循环

 until expression
     do
         command
         command
         ...
     done
 
 # 打印1-5数字
 i=1
 until [ $i -gt 5 ]
 do
     echo $i
     let i++
 done

4.循环控制

循环体:do....done 之间的内容

5.循环嵌套

循环体包含另一个完整的循环结构,称为循环嵌套

每次外循环都会触发内循环,直到内循环完成后才会执行下一个外循环。

for 循环、while 循环和until 循环可以相互嵌套

 # 打印九九乘法表
 # Y轴:循环9次,打印9行空行
 # X轴:循环次数和Y轴相关;打印的是X和Y轴乘积 $[] $(())
 
 # for循环
 for ((y=1;y<=9;y++))
 do
     for ((x=1;x<=$y;x++))
     do
         echo -ne "$x*$y=$[$x*$y]t"
     done
 echo
 echo
 done
 
 # while循环
 y=1
 while [ $y -le 9 ]
 do
     x=1
     while [ $x -le $y ]
     do
         echo -ne "$x*$y=$[$x*$y]t"
         let x++
     done
 echo
 echo
 let y++
 done
 
 # until循环
 y=1
 until [ $y -gt 9 ]
 do
     x=1
     until [ $x -gt $y ]
     do
         echo -ne "$x*$y=$[ $x*$y ]t"
         let x++
     done
 echo
 echo
 let y++
 done

函数 1. 函数定义

 # 方法1
 函数名(){
   函数体(一堆命令的集合,来实现某个功能)
   return
 }
 
 # 方法2
 function 函数名(){
    函数体(一堆命令的集合,来实现某个功能)
    echo hello
    echo world
    return
 }

函数中可以定义位置参数,如$1、$2等php遍历字符串,调用函数时可以传入位置参数。

函数中可以使用local关键字来定义局部变量

函数中的return可以结束一个函数,return默认返回函数中最后一个命令状态值,也可以给出参数值,范围是0到256

2. 函数调用

 #!/bin/bash
 # 打印菜单
 menu(){
 cat <<-END
     h    显示命令帮助
     f    显示磁盘分区
     d    显示磁盘挂载
     m    查看内存使用
     u    查看系统负载
     q    退出程序
     END
 }
 menu    # 调用函数

 cat func.sh  # 函数有入参,用$1 $2 ...表示
 #!/bin/bash
 hello(){
 echo "hello args is $1 and $2"
 hostname
 }
 
 source func.sh # or
 . func.sh 
 hello my world

 # vim ~/.bashrc
 文件中增加如下内容:
 hello(){
 echo "hello $1"
 hostname
 }
 # 用户打开bash后可以直接使用该函数

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php遍历字符串-Shell 快速参考指南 https://www.wkzy.net/game/181402.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务