小试牛刀-1.3

1、脚本语言通常不需要在使用变量之前声明其类型,只需要直接赋值就可以了。在Bash中,每一个变量的值都是字符串。无论是否给变量赋值时有没有使用引号,值都会以字符串的形式存储。有一些特殊的变量会被shell环境和操作系统环境来存储一些特别的值,这类变量就被称为环境变量

2、使用env命令查看所有与终端相关的环境变量。对于进程来说,其运行时的环境变量可以使用下面的命令来查看;cat /proc/$PID/environ ,其中PID设置成相关进程的进程ID

使用命令pgrep来获得运行进程的ID,那么获得ID后就可以使用上面的来查看该应用程序的环境变量。

上面的命令返回一个包含环境变量以及对应变量值的列表。每一个变量以name=value的形式来描述,彼此之间由null字符()分隔。将替换成 ,则输出就是每一行显示一组"变量=值"。替换可以使用tr命令来实现

cat /proc/$PID/environ | tr '' ' '

3、变量赋值:var=value,如果value不包含任何空白符(例如空格),那么它就不需要使用引号进行引用,否则必须使用单引号或双引号。

把var=value写成var = value是一个常见错误,但前者是赋值操作,后者是相等操作

在变量名之前加上$前缀就可以打印出变量的内容:

var="value"

echo $var或 echo ${var}

4、可以在printf或echo命令的双引号中引用变量值

eg:#!/bin/bash

  fruit=apple

  count=5

  echo "we have $count ${fruit}(s)"

结果:we have 5 apple(s).

环境变量是未在当前进程中定义,而从父进程中继承而来的变量。如:环境变量HTTP-PROXY定义了互联网连接应该使用那个代理服务器。

设置该环境变量:HTTP_PROXY=192.168.1.23:3128

                      export HTTP_PROXY

export命令用来设置环境变量。从当前shell脚本执行的任何应用程序都会继承这个变量。

在默认情况下,有很多标准环境变量可供shell使用。其中PATH就是其中之一,通常,变量PATH包含:

echo $PATH

在给出所有执行的命令后,shell会自动在PATH环境变量所包含的目录列表中查找对应的可执行文件。PATH通常定义在/etc/environment或/etc/profile或~/.bashrc中。如果需要在PATH中添加一条新路径,可以使用:

export PATH="$PATH:/home/user/bin"

也可以使用

PATH="$PATH:/home/user/bin"

export PATH

还有其他环境变量,如:HOME,PWD,USER,UID,SHELL等

5、获得字符串长度

a、获得变量值长度:length=${#var}

eg:var=1234567890

     echo ${#var}

  结果:10

b、识别当前所使用的shell

echo $SHELL 等价于echo $0

c、检查是否为超级用户

UID是一个重要的环境变量,可以用于检查当前脚本是以超级用户还是普通用户的身份运行。

 if [ $UID -ne 0 ] ; then

  echo Non root user.Please run as root.

else

  echo Root user

fi

d、修改Bash提示字符串

我们可以利用PS1环境变量来定制提示文本。

默认的shell提示文本是在文件~/.bashrc中的某一行设置的

可以使用如下命令列出设置变量PS1的那一行:

cat ~/.bashrc | grep PS1

PS1='${debian_chroot:+($debian_chroot)}u@h:w$ '

如果要设置一个定制的提示字符串,可以输入:

PS1="PROMPT>"

PROMPT> Type commands here #提示字符串已经改变

我们可以利用类似e[1;31的特定转义序列来设置彩色的提示字符

还有一些特殊的字符可以扩展成系统参数。例如:u可以扩展为用户名,h可以扩展为主机名,而w可以扩展为当前工作目录。

Linux下Bash提示字符串修改

Linux下Bash提示字符串修改

 
在linux下,有时候为了美观,会设置命令窗口的界面设置,比如颜色和显示格式,下面就修改敲命令时显示的提示信息,在Suse11系统下测试,命令如下:
  www.2cto.com  
vi /root/.bashrc
默认没有其他变量,只有一个umask,此时设置一个变量:
 
PS1='e[1,31mu@h:w$ e[0m'
 
运行bash命令,刷新显示效果,可以看到效果变了,颜色变成了红色,效果如下:
 
root@test_B1:/opt#
  www.2cto.com  
解释:
 
1、e[1,31m 表示显示颜色为红色,其他颜色代号为:重置-0;黑色-30;红色-31;绿色-32;黄色-33;蓝色-34;洋红-35;青色-36;白色-37;
 
e[0m就是显示效果回到默认的颜色;
 
2、u:用户名
 
    h:hostname
 
    w:当前目录名(绝对路径)
当我们打开或者运行一个shell的时候,会看到像【root@localhost ~】# 这样的提示字符串,不同版本Linux有些许差别(以CentOS7.0为例)。
这个字符串是利用PS1环境变量设置的,我们可以修改PS1来改变提示字符串。(人民邮电出版社的《Linux shell脚本攻略》中说到,默认PS1是在~/.bashrc中的某一行<基于debian> 可以用:#cat  ~/.bashrc  |  grep PS1  来找到)
当使用vi编辑器打开~/.bashrc时,内容为:
# .bashrc 
# Source global definitions 
if [ -f /etc/bashrc ]; then 
 . /etc/bashrc 
fi 
# Uncomment the following line if you don't like systemctl's auto-paging feature: 
# export SYSTEMD_PAGER= 
# User specific aliases and functions
然后就去找到/etc/bashrc,在第41行找到了:
[ "$PS1" = "\s-\v\$ " ] && PS1="[u@A W]\$ "
修改&&后面的PS1的值就可以了。
 
参数含义(参考《鸟哥的Linux私房菜》):
d :显示『星期 月 日』的格式,如:"Sun Mar 22" ;
H :显示完整的主机名 ;
 h :显示主机名第一个小数点前的部分;
  :显示时间,为 24 小时格式『HH:MM:SS』; 
 T :显示时间,为 12 小时格式『HH:MM:SS』 ;
 A :显示时间,为 24 小时格式『HH:MM』 ;
 @ :显示时间,为 12 小时格式『am/pm』样式; 
 u :当前使用者的用户名,如『root』 ;
 v :BASH 的版本信息,如4.2;
 w :完整的当前目录名称,由根目录写起的目录名称。但家目录会以 ~ 代替;
 W :只列出当前目录下最后目录的名称;
 # :下达的第几条指令;
 $ :提示字符,root为#,普通用户为$。

---恢复内容结束---

原文地址:https://www.cnblogs.com/gary-guo/p/6071131.html