1、脚本语言通常不需要在使用变量之前声明其类型,只需要直接赋值就可以了。在Bash中,每一个变量的值都是字符串。无论是否给变量赋值时有没有使用引号,值都会以字符串的形式存储。有一些特殊的变量会被shell环境和操作系统环境来存储一些特别的值,这类变量就被称为环境变量。
2、使用env命令查看所有与终端相关的环境变量。对于进程来说,其运行时的环境变量可以使用下面的命令来查看;cat /proc/$PID/environ ,其中PID设置成相关进程的进程ID。
使用命令pgrep来获得运行进程的ID,那么获得ID后就可以使用上面的来查看该应用程序的环境变量。
上面的命令返回一个包含环境变量以及对应变量值的列表。每一个变量以name=value的形式来描述,彼此之间由null字符(\0)分隔。将\0替换成\n,则输出就是每一行显示一组"变量=值"。替换可以使用tr命令来实现
cat /proc/$PID/environ | tr '\0' '\n'
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,31m\u@\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 :显示主机名第一个小数点前的部分;
\t :显示时间,为 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为#,普通用户为$。
---恢复内容结束---