zoukankan      html  css  js  c++  java
  • shell脚本学习总结05--变量与环境变量

    bash中一切变量都是以字符串的形式存储,env命令可以查看与此终端进程相关的环境变量。

    man bash

    查看一个进程的环境变量

    1.获得程序的PID,例如Java
    # pgrep java
    23492


    2.查看对应的环境变量
    # cat /proc/23492/environ


    3.将输出格式化,这样查看会比上图清晰
    # cat /proc/23492/environ |tr '' ' '
    “^@”将变换成换行符


    变量赋值
    var=varlue,如果value不包含空白字符,则不必加单引号或者双引号
    var = value 是相等操作,注意区分,很多人这个地方发生混淆


    输出变量
    echo $var 或者 echo ${var}
    例如:

    # var=apple
    # echo "${var}(s)"
    apple(s)


    变量字符串的常用操作

    [root@Director ~]# var="hello world"
    
    [root@Director ~]# echo ${#var}                         #计算字符串的长度,类似于"wc -m"-1;expr length "$var"
    11
    
    [root@Director ~]# echo ${var:2}                        #从第二个字符串之后开始取,不包括第二个字符串。
    llo world
    
    [root@Director ~]# echo ${var:2:2}                      #从第二个字符串之后开始取,取两个字符,相当于"echo $var|cut -c 3-4"
    ll
    
    [root@Director ~]# echo ${var#hell}                     #字符串开头删除最短匹配的字符
    o world
    
    [root@Director ~]# echo ${var%ld}                       #从结尾开始删除最短匹配的字符
    hello wor
    
    [root@Director ~]# echo ${var/world/linux}              #替换匹配字符,类似 “echo ${var}|sed 's/world/linux/'”
    hello linux
    
    [root@Director ~]# echo ${var/#hello/linux}             #前缀匹配,则替换
    linux world
    
    [root@Director ~]# echo ${var/%world/linux}             #后缀匹配,则替换
    hello linux

    [root@Director test]# echo $gender

    [root@Director test]# echo ${gender:-female} #变量未赋值,则定义一个值
    female

    [root@Director test]# echo $gender

    [root@Director test]# echo ${gender:=female}       #变量未赋值,则定义一个值,并传递给它 
    female

    [root@Director test]# echo $gender
    female

    [root@Director test]# echo ${gender-male}        #变量未定义,则给予定义,若定义了则取原来的值
    male


    应用场景:

    1.防止$path未定义,而删除了根目录或者root目录

    [root@Director /]# find  ${path:=/test} -name "*.bak"|xargs rm -rf  

    2.打印出文件或目录的后缀

    [root@Director test]# jarName=app_20160807.jar
    [root@Director test]# echo ${jarName:((${#jarName}-3))}
    jar


    特殊变量

    $PS1         系统默认:PS1="[u@h W]$"
    $UID    为0时代表root用户

    $TMOUT    终端timeout时间

    $0,$* ,$@ , $#

    [root@Director sbin]# cat /usr/local/sbin/test.sh 
    #!/bin/bash
    echo '$0='  $0       #脚本的名称
    echo '$1='  $1       #运行脚本的第n个参数
    echo '$#='  $#     #运行脚本参数的个数
    echo '$*='  $*     #所有参数当成单个字符串,很少使用
    echo '$@='  $@     #所有参数
    basename $0       #获取文件名
    dirname $0       #获取文件的目录
    [root@Director sbin]# sh /usr/local/sbin/test.sh  aa bb
    $0= /usr/local/sbin/test.sh
    $1= aa
    $#= 2
    $*= aa bb
    $@= aa bb
    test.sh
    /usr/local/sbin

     进程状态变量

        $?  获取执行上一个命令的返回值(0为成功,其它为失败)

          $$ 获取当前shell的PID

          $_ 获取之前命令或脚本的最后一个参数

         !$ 执行上一个命令  

  • 相关阅读:
    方维,将采集到的淘宝天猫商品详情里面的链接转换成淘宝客链接
    方维系统,根据关键词、品牌 采集淘宝天猫的商品
    方维系统,评论按钮在没输入内容是虚的不能点击,输入内容选择分类后就可以点击了
    方维模板修改,评论框默认高度是70px,鼠标点击框内后高度增大变为100px
    方维模板修改,发布分享、主题有商品时,标签需自动写到input里,不要再手动去点击添加,手动点击可取消
    只采集淘宝上面包邮的商品,用方维
    Android Application 创建全局变量
    非常优秀的iphone学习文章总结!
    android NDK jni下的c文件 Unresolved inclusion
    Android Service学习笔记
  • 原文地址:https://www.cnblogs.com/zydev/p/5739016.html
Copyright © 2011-2022 走看看