linux bash shell变量操作

Centos

修改terminal命令行,每行开始的用户名,主机名,目录

export PS1="> "
每行都将以> 开始

export PS1=" \W:> "
每行都将以   当前目录:>  开始

export PS1="[\u@\h \W]\$"
回复默认,默认是以[用户名@主机名 当前目录]$开头

PS1中字符含义如下

\a     The 'bell' character (“铃声”符号)
\A     24h Time (24小时制时间)
\d     Date (e.g. Tue Dec 21) (日期)
\e     The 'escape' charakter (“Esc”符号)
\h     Hostname (up to the first ".") (主机名称,写到第一个“.”)
\H     Hostname (主机名称)
\j     No. of jobs currently running (ps) (目前正在跑的进程的数目)
\l     Current tty (当前的tty)
\n     Line feed (换行符)
\t     Time (hh:mm:ss) (时间格式)
\T     Time (hh:mm:ss, 12h format) (时间,12小时格式)
\r     Carriage return (回车符)
\s     Shell (i.e. bash, zsh, ksh..) 
\u     Username (用户名称)
\v     Bash version (Bash版本)
\V     Full Bash release string (完整的Bash发行号)
\w     Current working directory (当前工作目录)
\W     Last part of the current working directory (当前工作目录的最后一部分)
\!     Current index in history (以往的当前下标)
\#     Command index (命令行下标)
\$     A "#" if you're root, else "$" (root身份登陆的时候是“#”,其他身份登陆都是“$”)
\\     Literal Backslash (取字面意思的反斜杠)
\@     Time (12h format with am/pm) (时间,用am/pm的12小时制)

还可以设置字体颜色,背景色

~/.bashrc或者/etc/profile中加入
export PS1="\[\e[32;1m\][\u@\h \W]#\[\e[0m\]"
\[\e[32;1m\]表示开始变色
\[\e[0m\]表示结束变色
如果不结束变色,整个终端的字体颜色都会被修改,或许有人就是要这种效果
在PS1中设置字符颜色的格式为:\[\e[F;Bm\]........\[\e[0m\],其中“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47,\[\e[0m\]作为颜色设定的结束。

颜色对照表:

F B

30 40 黑色

31 41 红色

32 42 绿色

33 43 黄色

34 44 蓝色

35 45 紫红色

36 46 青蓝色

37 47 白色

#0:关闭特殊效果
#1:高亮显示
#4:下划线
#5:闪烁
#7:反白显示
#8:隐藏不可见
#特殊效果和颜色用;号相隔,没有顺序
~/.bashrc 或者 /etc/profile 中加入如下
export PS1="\[\e[32;1m\][\u@\h \W]\[\e[0m\]\[\e[32;5;1m\]>\[\e[0m\]"

或者直接在命令行中
PS1="\[\e[32;1m\][\u@\h \W]\[\e[0m\]\[\e[32;5;1m\]>\[\e[0m\]"

就会出现高亮效果,并且>在闪烁
32表示字的颜色,5表示字的效果,1m表示背景色(1不在40-49之间,所以背景色没效果)

{}变量使用技巧

1.${a:-b} 如果a有值,返回a的值,如果没有返回b,b用$b替代的话,返回b的值

 11:46:04 ~:> b=b_value
 11:46:28 ~:> c=${a:-b}
 11:46:33 ~:> echo $c
b
 11:46:47 ~:> c=${a:-$b}
 11:46:55 ~:> echo $c
b_value
 11:46:57 ~:> a=a_value
 11:47:03 ~:> c=${a:-$b}
 11:47:06 ~:> echo $c
a_value

2.${a:=b} 如果a有值,返回a的值,否则返回b,并且a也赋值为b,b用$b可以返回b的值,并赋值给a

 12:05:00 ~:> a=
 12:05:24 ~:> echo $a

 12:05:26 ~:> c=${a:=$b}
 12:05:30 ~:> echo $a
b_value
 12:05:32 ~:> echo $c
b_value

3.${a:+b}a有值的时候返回b,无值的时候返回a

 12:05:37 ~:> a=a_value
 12:10:57 ~:> c=${a:+b}
 12:11:05 ~:> echo $a
a_value
 12:11:08 ~:> echo $c
b
 12:11:10 ~:> c=${a:+$b}
 12:11:18 ~:> echo $a
a_value
 12:11:21 ~:> echo $c
b_value
 12:11:23 ~:> a=
 12:12:05 ~:> c=${a:+$b}
 12:12:07 ~:> echo $c

 12:12:10 ~:> echo $a


4.${a:?b} a有值则返回a的值,无值则退出程序并打印错误,b应该设置为错误信息

test.sh文件
------------------------------------
#!/bin/bash
a="hello"
b="b_value"
c="c_value"
c=${a:?$b}
echo $c
echo $a
-----------------------------------
输出
hello
hello

test.sh文件
-----------------------------------
#!/bin/bash
a=
b="b_value"
c="c_value"
c=${a:?$b}
echo $c
echo $a
----------------------------------
输出:相当于意外退出
./test.sh: line 5: a: b_value

5.${#a}返回字符串长度

 14:02:50 Desktop:> a=hello
 14:06:19 Desktop:> echo ${#a}
5
 14:06:26 Desktop:> a="hello world"
 14:06:33 Desktop:> echo ${#a}
11

6.${a#pattern}   ${a##pattern} 删除a中从头匹配pattern的子字符串,#最短匹配,##最长匹配

 14:06:26 Desktop:> a="hello world"
 14:06:38 Desktop:> echo ${a#o}
hello world
 14:08:05 Desktop:> echo ${a#hello}
world
 14:08:42 Desktop:> echo ${a#heo}
hello world
 14:09:15 Desktop:> echo ${a#hello w}
orld
 14:10:05 Desktop:> echo ${a##*o}
rld
 14:11:24 Desktop:> echo ${a#*o}
world
 14:11:28 Desktop:> echo ${a##hello*r}
ld
 14:09:56 Desktop:> echo ${a##hello w.*r}
hello world

a#o,a#heo,a不是以o开头的,也不是以heo开头,所以不匹配,也就不删除

任意适配不用小数点,直接用*,所以hello w.*r不匹配,hello*r匹配

7.${a%b} ${a%%b}删除a中从尾部匹配pattern的子字符串,%最短匹配,%%最长匹配

 14:26:49 Desktop:> echo ${a%d}
hello worl
 14:27:02 Desktop:> echo ${a%l*d}
hello wor
 14:27:12 Desktop:> echo ${a%%l*d}
he

8.${a/pattern/b} ${a//pattern/b} 将patten替换为b,/pattern/b替换第一个,//pattern/b替换所有

 14:14:05 Desktop:> echo ${a/o/p}
hellp world
 14:17:48 Desktop:> echo ${a//o/p}
hellp wprld

9.${a/#pattern/b} ${a/%pattern/b}将patten替换为b,/#pattern/b从前面替换,/%pattern/b从后面替换,都做最长匹配

 14:20:10 Desktop:> echo ${a/#o/p}
hello world
 14:20:21 Desktop:> echo ${a/#h/p}
pello world
 14:20:53 Desktop:> echo ${a/#he/p}
pllo world
 14:20:59 Desktop:> echo ${a/#*o/p}
prld
 14:21:14 Desktop:> echo ${a/%d/p}
hello worlp
 14:21:37 Desktop:> echo ${a/%*d/p}
p
 14:21:42 Desktop:> echo ${a/%o*d/p}
hellp

a/#o/p a是hello world,不以o开头,所以不匹配

10.${a:offset} ${a:offset:length}截取字符串,从offset开始,length个字符,默认后面全部

 14:27:16 Desktop:> echo ${a:3}
lo world
 14:30:10 Desktop:> echo ${a:3:2}
lo
 14:30:16 Desktop:> echo ${a:3:10}
lo world

归类:

:-,:+,:=,:?两值取一

#,##,%,%%删除匹除字符串

/pattern/string,//pattern/string,/#pattern/string,/%pattern/string,替换匹配字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值