zoukankan      html  css  js  c++  java
  • shell变量、函数和数组以及字符串的截取

    一、变量

    1.shell变量名

    (1)可以由字母、数字、下划线等字符组成。但是第一个字符必须是字母或者下划线。

    (2)若果变量中包含下划线(_)则要特别注意,$project_svn_$date.tar.gz 和 {$project_svn}_$date.tar.gz。第一个shell理解为$project是一个变量。

    2.变量的赋值:

    variable=value

    note:赋值运算符前后不能有空格,否则会报错。

    3.变量分类:

    内部变量是为了shell编程的而设定的变量。

    本地变量是在代码块或函数中定义的变量,切尽在定义的范围内有效

    参数变量是调用shell脚本或执函数传递的时的变量

    环境变量是为了系统内核、系统命令和用户命令提供运行环境而设定的变量

    用户自定义变量即普通变量或者临时变量

     3.1内部变量

          PWD:表示当前的工作目录,其变量值等于PWD内部命令的输出。

    [centos@s201 ~]$ echo $PWD
    /home/centos

           RANDOM: 每次引用这个变量,将会生成一个均匀分布0-32676 范围内的随机整数

           SCONDS:脚本已经运行的时间

           PPID:当前进程的父进程的进程ID

           $?:表示最近一次执行的命令或者shell脚本的出口状态

     3.2环境变量:

    EDITOR:

    HOME:用户主目录

    PATH:指定命令的检索路径

    如何将/usr/local/mysql/bin添加到系统默认读取的PATH的变量中?

    PATH=$PATH:/usr/local/mysql/bin

    note:linux包含两个重要文件 /etc/profile $HOME/.bash_profile 每次系统登入都要读取这两个文件。

    5.变量的引用和替换

    假设variable是一个变量

    $variable 或者 ${variable } 表示使用变量中储存的值用于替换变量本身

    note:位于但用双引号中的变量可以替换,位于单引号中变量则不能进行替换。

    二、函数

    function 函数名()

    {

    action;

    [returm 数值;]

    }

    具体说明:

    1自定义函数既可以用带function 参数的函数名(),也可以直接用函数名()直接定义,而不带任何参数

    2参数返回的时候可以显示的加return返回,如果不加,则将一最后一条命令的运行结果作为返回值。return 后跟数值,取值范围0-255

    demo遍历某个目录所有文件

    #!/bin/bash
    function traverse(){
    for file in `ls $1`
     do
      if [ -d $1"/"$file ]
       then
          traverse $1"/"$file
       else
          echo  $1"/"$file
      fi
     done
    
    }
    
    traverse "/home"

    三、shell中的数组

    (1)定义数组

    arr1=(value1...value2)

    arr1=(

    value1

    value2

    value3

    )

    或者单独定义数组的各个分量

    arr1[0]=value0

    arr1[1]=value1

    (3)读取数组

    读取数组值的一般格式:

    ${arr1[index]}

    使用@ *可以获取数组中的所有元素:

    ${arr[*]}

    ${arr[@]}

    获取数组的长度

    ${#arr[*]}

    ${#arr[@]}

    也可以获取数组中单个元素的长度

    ${#arr[index]}

    [centos@s201 ~]$ arr1=( 1 2 3 4 5 6 7 )        
    [centos@s201 ~]$ echo ${arr1[1]}
    2
    [centos@s201 ~]$ echo ${arr1[*]}
    1 2 3 4 5 6 7
    [centos@s201 ~]$ echo ${arr1[@]}
    1 2 3 4 5 6 7
    [centos@s201 ~]$ echo ${#arr1[@]}
    7
    [centos@s201 ~]$ echo ${#arr1[*]}
    7
    [centos@s201 ~]$ echo ${#arr1[1]}
    1

    四、shell中字符串的截取

    第一种方法:

    从左向右截取最后一个string后的字符串

    ${variable##*string}

    从左向右截取第一个string后字符串

    ${variable##*string}

    从右向左截取最后一个string前的字符串

    ${variable%%string*}

    从右向左截取第一个string前的字符串

    ${variable%string*}

    [centos@s201 ~]$ echo ${a##*"i"}
    n
    [centos@s201 ~]$ echo ${a##*i}
    n
    [centos@s201 ~]$ echo ${a#*i}
    ngbin
    [centos@s201 ~]$ echo ${a%%i}
    wangqingbin
    [centos@s201 ~]$ echo ${a%%i*}
    wangq
    [centos@s201 ~]$ echo ${a%i*}
    wangqingb

    第二种方法:

    ${变量:n1:n2} 截取变量n1开始的n2 个字符。第一位是0

    [centos@s201 ~]$ echo ${a:2:4}
    ngqn

    第三种方法:

    ls -al | cut -d "." -f2

     ls -al
    total 1508456
    drwx------.  47 centos centos      8192 Apr  5 07:07 .
    drwxr-xr-x.   3 root   root          20 Jul 16  2018 ..
    -rw-rw-r--.   1 centos centos         0 Jan  9 14:59 1
    -rw-rw-r--.   1 centos centos         0 Jan  9 14:35 ]1
    -rw-rw-r--.   1 centos centos         0 Jan  9 14:40 1]
    -rw-rw-r--.   1 centos centos         0 Jan  9 14:38 1]]
    -rwxrwxr-x.   1 centos centos        81 Jan  9 21:55 1.sh
    -rw-rw-r--.   1 centos centos       109 Oct 11 11:31 1.txt
    -rw-rw-r--.   1 centos centos  52839453 Jul 30  2018 2018-07-01.log
    [centos@s201 ~]$ ls -al |cut -d "." -f2
    total 1508456
      47 centos centos      8192 Apr  5 07:07
       3 root   root          20 Jul 16  2018
       1 centos centos         0 Jan  9 14:59 1
       1 centos centos         0 Jan  9 14:35 ]1
       1 centos centos         0 Jan  9 14:40 1]
       1 centos centos         0 Jan  9 14:38 1]]
       1 centos centos        81 Jan  9 21:55 1
       1 centos centos       109 Oct 11 11:31 1
       1 centos centos  52839453 Jul 30  2018 2018-07-01
    [centos@s201 ~]$ ls -al |cut -d "." -f1
    total 1508456
    drwx------
    drwxr-xr-x
    -rw-rw-r--
    -rw-rw-r--
    -rw-rw-r--
    -rw-rw-r--
    -rwxrwxr-x
    -rw-rw-r--
    -rw-rw-r--
  • 相关阅读:
    javascript DOM操作
    DirectX编译出现link错误
    PPT快捷键
    Windows GDI笔记
    VC++键盘消息
    VC++6.0快捷键
    C#值类型和引用类型
    C#转义字符
    关于C#里“浅表副本”的解释
    C#中override和overload的区别
  • 原文地址:https://www.cnblogs.com/wqbin/p/10886497.html
Copyright © 2011-2022 走看看