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小时制)

{}变量使用技巧

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,替换匹配字符串

发布了275 篇原创文章 · 获赞 46 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/youyudexiaowangzi/article/details/96477463