变量极速入门与进阶,脚本计策

By admin in 美高梅手机版4858 on 2019年5月4日

壹,假若创造shell脚本?

1、终端

极限是交互式工具,用户能够由此终端与shell境况张开互动。shell命令都以在shell终端中输入并推行的。

变量极速入门与进阶,脚本计策。开荒终端后,就能够冒出四个提示符。其款式经常如下:

username@hostname $

或者

root@hostname #

要么就以简单的$或#表示。

$表示的是普通用户,#代表的是管理员用户root。root是Linux系统中权限最高的用户。

简介

类Unix操作系统设计令人惊叹,即便是在后天,它们的框架还是是顶级设计之一。这种构架最首要的3个风味正是命令行分界面或Shell。Shell景况足以使用户与操作系统的骨干职能举办相互。大家所说的编辑脚本常常是使用某种基于解释器的编制程序语言。大家能将1各种供给施行的命令写入文件中,通过Shell来实行。

以Bash举例

开发终端的时候会有提醒符

username@hostname$:
美高梅手机版4858 ,或
root@hostname#:

用$是普通用户,#则是助理馆员用户,在Linux中,root是参天权力用户;

貌似选拔“bash
脚本文件名”来运维脚本文件,当然也得以将脚本文件产生可试行文件直接运转

要是有需要的话,可以利用shebang来实现脚本的独立运行。对此必须设置脚本的可执行权限,这样它就可以使用位于#!之后的解释器路径来运行了。就像这样:
 $ chmod a+x script.sh
该命令赋予所有用户script.sh文件的可执行权限。这个脚本能以下列方式执行:
$ ./script.sh #./表示当前目录
或者
$ /home/path/script.sh #使用脚本的完整路径
内核会读取脚本的首行并注意到shebang为#!/bin/bash。它识别出/bin/bash并在内部像这样执行该脚本:
$ /bin/bash script.sh

种种命令能够以“;”来分隔,注释能够用#;

LinuxShell脚本战术阅读笔记第贰章小规模试制牛刀

选用放4文本编辑软件,一般为vim,创立.sh结尾的文件,在文件的最开头用
#!/bin/bash 注明shell的类型

2、Shell

shell脚本平时是以一个文本行#!/bin/bash初始的文件文件,#!位于解释器路线以前,/bin/bash是Bash的解释器命令路线。

有二种运营shell脚本的艺术。一种是将脚本作为bash的命令行参数,另1种是赋予脚本可进行权限。

一)将脚本作为命令行参数

运行方式如下:

$ bash script.sh # 若是脚本文件位于当前目录下

或者

$ bash /home/path/script.sh # 使用script.sh的全部路线

倘若将脚本作为bash的命令行参数来运维,就无须文本行#!/bin/bash了。

2)授予脚本可进行权限

那时使用#!后的解释器运营。

加多可实行权限:

chmod a+x script.sh

上述命令赋予具备用户推行script.sh文件的权力。施行措施如下:

$ ./script.sh # ./ 代表当前目录

或者

$ /home/path/script.sh # 使用脚本完整路线

内核会读取脚本的首行#!/bin/bash,并在里边按一下主意实践脚本:

$ /bin/bash script.sh

终点打字与印刷

命令echo或然选取C语言的printf
常备是运用echo,在唯有的字符串情状下,能够直接出口、加‘’也许“”,那个都足以打字与印刷出来;
在好几情形下那些主意是有分别的,特殊符号比如“!”在“双引号”中是打字与印刷不出来的:

echo hello world !(这样直接打印可以显示)

或者

echo "hello world \!(前面加上\转义符)

使用不带引号的echo时,无法在所要突显的文件中使用分号(;),因为分号在Bash
shell
中被看成命令定界符。
以echo hello;hello为例,echo
hello被视为二个发令,首个hello则被视为另一个限令。

echo会在文末自动增多换行符,printf要求手动加多
example:

printf “%-5s %-10s %-4s\n” No Name Mark
printf “%-5s %-10s %-4.2f\n” 1 Ardee 80.3456
printf “%-5s %-10s %-4.2f\n” 2 James 90.9989
printf “%-5s %-10s %-4.2f\n” 3 Kobe 77.564

能够打字与印刷表格

一、简介

一.Bash(Bourne Again Shell),最近繁多GNU/Linux系统私下认可的shell情状。

指令都是在shell终端中输入并奉行。张开终端后,提示符的格局:[email protected]$

[email protected]
# ($代表普通用户,#代表助理馆员用户root)

二.shell脚本是七个以#!(shebang)开端的公文文件,如下: #!/bin/bash

shebang是一个文本行,个中#!位于解释器路线在此以前。/bin/bash是Bash的解释器命令路线。

三.两种运营脚本的法门。

1种是将脚本作为bash到命令行参数

[email protected]:~/lssc/chpt1$ bash test_script.sh 
hello,world

另1种是给予脚本实施权限,将其成为可推行文件。chmod a+x script.sh

[email protected]:~/lssc/chpt1$ chmod a+x test_script.sh 
[email protected]:~/lssc/chpt1$ ./test_script.sh 
hello,world

内核会读取脚本的首行,注意到shebang为#!
/bin/bash。它识别出/bin/bash,并在里面像那样举行该脚本:$ /bin/bash
test_script.sh

其中,test_script.sh文件内容如下:

#!/bin/bash
echo hello,world

3.伍.当运维shell时,它一起初会举办一组命令来定义诸如提醒文本、颜色等设置。那组命令在剧本文件~/.bashrc中,对于登入shell则是~/.bash_profile。Bash还维护了1个历史记录文件~/.bash_history保存用户运转过的命令。

肆.~代表主目录,平常是/home/user,当中user是用户名;如果root用户,则为/root。

⑤.登六shell是登六主机后取得的老大shell。假如是登六图形分界面境遇如GNOME、KDE后展开了三个shell,就不是登陆shell。

陆.Bash中,每种命令或指令连串是以分行或换行符来分隔。#指明注释的初阶,一连到行尾。如
$ cmd一 ; cmd2 等同于 $ cmd一 $ cmd二

如:

3、打印

打印补充内容

2、终端打字与印刷

终点是交互式工具,能够由此它与shell处境张开互动。
一.echo.私下认可在每便调用后增加3个换行符。-n 忽略结尾换行符。

贰.echo的三种方式打字与印刷:直接打字与印刷、单引号、双引号

 

[email protected]:~/lssc/chpt1$ echo "Welcome to Bash"
Welcome to Bash
[email protected]:~/lssc/chpt1$ echo Welcome to Bash
Welcome to Bash
[email protected]:~/lssc/chpt1$ echo 'Welcome to Bash'
Welcome to Bash

二种方法的副成效:

 

平昔打字与印刷:不可能显得文本中的分号——分号在Bash中是命令定界符。echo
hello;hello被认为是四个命令echo hello和hello。

单引号:变量替换在单引号中没用。单引号中不进行变量替换。

[email protected]:~/lssc/chpt1$ echo $var and '$var' and "$var"
value and $var and value

 

双引号:不能够打字与印刷叹号!。或将其转义,\!。确切地说,叹号在终极、恐怕叹号后并未有空格,则不可能不奇怪打字与印刷。如下边测试,能够看出,叹号前面有空格时还是能打字与印刷的。

[email protected]:~/lssc/chpt1$ echo "Hello world !"
bash: !": event not found
[email protected]:~/lssc/chpt1$ echo "cannot include exclamation - ! within"
cannot include exclamation - ! within
[email protected]:~/lssc/chpt1$ echo "c!c"
bash: !c": event not found
[email protected]:~/lssc/chpt1$ echo "c ! c"
c ! c
[email protected]:~/lssc/chpt1$ echo "c! c"
c! c
[email protected]:~/lssc/chpt1$ echo "c !c"
bash: !c": event not found

 

3.printf.无自动换行符。参数近似于C语言,参数以空格分隔。如下:

 

#!/bin/bash
#文件名:printf.sh

printf "%-5s %-10s %-4s\n" No Name   Mark
printf "%-5s %-10s %-4.2f\n" 1 Sarath 80.3456
printf "%-5s %-10s %-4.2f\n" 2 James 90.9989
printf "%-5s %-10s %-4.2f\n" 3 Jeff 77.564

运营后出示:

 

[email protected]:~/lssc/chpt1$ bash printf.sh 
No    Name       Mark
1     Sarath     80.35
2     James      91.00
3     Jeff       77.56

四.接纳echo和printf,选项要在字符串在此之前。否则,选项被Bash视为另1个字符串。

echo -e “包蕴转义种类到字符串”

 

<pre name="code" class="plain">[email protected]:~/lssc/chpt1$ echo -e "1\t2\t3"
1 2 3
[email protected]:~/lssc/chpt1$ echo -e "!"
bash: !: event not found
[email protected]:~/lssc/chpt1$ echo -e "\!"
\!
[email protected]:~/lssc/chpt1$ echo "1\t2\t2"
1\t2\t2
[email protected]:~/lssc/chpt1$ echo "\!"
\!

彩色输出

[email protected]:~/lssc/chpt1$ echo -e "\e[1;31m This is red text \e[0m"
 This is red text 

\e[1;3壹 将颜色设为海水绿,\e[0m
将颜色重新置回。替换3一就能够安装任何颜料,青黑=40,深黑=4壹,普鲁士蓝=4二,天灰=43,鲜黄=44,铁灰=四伍,青蓝=四陆,卡其色=四⑦。

ghostwu@dev:~/linux/shell$ cat how_to_use_shell.sh 
#!/bin/bash
ls /

1)echo命令

echo是用于终端打字与印刷的的着力命令。

动用带双引号的文本,结合echo命令就足以将该文本在终点中打字与印刷出来。如下:

$ echo “Welcome to Bash”

Welcome to Bash

恍如地,不带双引号的公文也足以博得平等的输出结果:

$ echo Welcome to Bash

Welcome to Bash

动用单引号也足以达到规定的规范平等的机能:

$ echo ‘Welcome to Bash’

Welcome to Bash

那么些方法看起来相似,但各有局地尤其的用处和副功用。比方:

$ echo “Welcome to Bash!”

那条命令会回来:

-bash: !”: event not found

之所以要求打字与印刷惊叹号,就毫无将其放入双引号中,只怕在事先增进三个转义字符(\),将其转义,如:

$ echo Welcome to Bash!

或者

$ echo ‘Welcome to Bash!’

或者

$ echo “Welcome to Bash\!”

动用不带引号的echo时,没办法在所要显示的公文中使用分号,因为分号在Bash
Shell中被当做命令定界符。以echo hello;hello为例,echo
hello被视为二个指令,第三个指令hello则被视为另3个发令。

变量替换在单引号中没用,在双引号中央银卓有成效,如下:

$ value=”Hello World”

$ echo ${value}

Hello World

$ echo “${value}”

Hello World

$ echo ‘${value}’

${value}

私下认可景况下,echo会将1个换行符追加到输出文本的尾巴。能够采取-n来忽略结尾的换行符。如下:

$ echo -n “Welcome to Bash”

echo还可以双引号字符串内的转义字符作为参数,即使急需选择转义连串,则选取echo
-e “包涵转义种类的字符串”那种格局。如下:

$ echo -e “1\t2\t3”

1 2 3

可以接纳转义体系来完成在顶峰生成彩色输出。

每个颜色都有对应的颜色码。如:重新初始化=0,浅橙=30,栗褐=3一,银白=32,浅法国红=3三,紫水晶色=34,铁黄=35,油红=3六,淡浅豆灰=37。

一般来说脚本:

#!/bin/bash

# 文件名:printf.sh

echo -e “\e[1;30m This is black text \e[0m”

echo -e “\e[1;31m This is red text \e[0m”

echo -e “\e[1;32m This is green text \e[0m”

echo -e “\e[1;33m This is yellow text \e[0m”

echo -e “\e[1;34m This is blue text \e[0m”

echo -e “\e[1;35m This is magenta text \e[0m”

echo -e “\e[1;36m This is cyan text \e[0m”

echo -e “\e[1;37m This is white text \e[0m”

输出如下:

美高梅手机版4858 1

要设置背景颜色,使用的颜色码为:重新初始化=0,水绿=40,漆黑=四1,紫罗兰色=42,浅紫=四三,鲜蓝=4四,洋行=45,藏蓝=肆陆,白灰四七。

一般来讲脚本:

#!/bin/bash

# 文件名:printf.sh

echo -e “\e[1;40m Black Backgroud \e[0m”

echo -e “\e[1;41m Red Backgroud \e[0m”

echo -e “\e[1;42m Green Backgroud \e[0m”

echo -e “\e[1;43m Yellow Backgroud \e[0m”

echo -e “\e[1;44m Blue Backgroud \e[0m”

echo -e “\e[1;45m Magenta Backgroud \e[0m”

echo -e “\e[1;46m Cyan Backgroud \e[0m”

echo -e “\e[1;47m White Backgroud \e[0m”

输出如下:

美高梅手机版4858 2

转义符

只要必要选拔转义体系,则利用echo –e “包蕴转义连串的字符串”那种样式

echo -e “1\t2\t3”
输出:1 2 3

三、变量和意况变量

脚本语言日常无需在应用变量前声称其项目,直接赋值就能够。Bash中,每多个变量的值都以字符串。一些特有的变量会被shell景况和操作系统用来储存一些专门的值,成为遭受变量。

1.应用env命令查看与极端相关到碰着变量。

上述命令归来的情况变量以name=value的样式提交,相互间由null字符(\0)分隔。
$pgrep 过程名 获得该程序的历程ID。
轮换命令 tr ‘\0’ ‘\n’ ,将空字符替换为换行符。

[email protected]:~/lssc/chpt1$ pgrep openvpn
1098
[email protected]:~/lssc/chpt1$ sudo cat /proc/1098/environ
UPSTART_INSTANCE=runlevel=2UPSTART_JOB=rcTERM=linuxPATH=/sbin:/usr/sbin:/bin:/usr/binRUNLEVEL=2PREVLEVEL=NUPSTART_EVENTS=runlevelPWD=/[email protected]:~/lssc/chpt1$ sudo cat /proc/1098/environ | tr '\0' '\n'
UPSTART_INSTANCE=
runlevel=2
UPSTART_JOB=rc
TERM=linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin
RUNLEVEL=2
PREVLEVEL=N
UPSTART_EVENTS=runlevel
PWD=/
previous=N
VERBOSE=no

二.变量赋值var=value

var是变量名,value是要赋的值。若value不分包别的空白字符,则不需使用引号;不然必须用单或双引号。
var = value 是至极操作。
行使$变量名或${变量名},获得变量的值。

[email protected]:~/lssc/chpt1$ var=value
[email protected]:~/lssc/chpt1$ echo $var
value
[email protected]:~/lssc/chpt1$ echo ${var}
value
[email protected]:~/lssc/chpt1$ var1= value
No command 'value' found, did you mean:
 Command 'pvalue' from package 'radiance' (universe)
value: command not found
[email protected]:~/lssc/chpt1$ var1 =value
var1: command not found
[email protected]:~/lssc/chpt1$ var1 = value
var1: command not found

3.export装置遭遇变量。此后从此时此刻shell脚本施行的任何应用程序都两次三番该变量。

规范景况变量,如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、USE奥迪Q3、UID、SHELL等

四.获得变量值的尺寸${#var}

[email protected]:~/lssc/chpt1$ var=1234567890
[email protected]:~/lssc/chpt1$ echo ${#var}
10

运用PS一蒙受变量定制提醒文本。默许的shell提醒文本是在文书~/.bashrc中的某行设置的。

[email protected]:~/lssc/chpt1$ cat ~/.bashrc | grep PS1
[ -z "$PS1" ] && return
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    PS1='${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\[email protected]\h: \w\a\]$PS1"
[email protected]:~/lssc/chpt1$ PS1="PROMPT>"
PROMPT>
PROMPT>
PROMPT>PS1='${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '
[email protected]:~/lssc/chpt1$ 

某个奇异的字符可扩大成体系参数。如:\u扩张为用户名,\h扩张为主机名,\w增加为当前职业目录。

二,怎么样执行shell?

2)printf命令

printf使用的参数和C语言中的printf函数同样。如下:

$ printf “Hello World”

printf使用引用文本或由空格分隔的参数。

能够在printf中选取格式化字符串,还足以内定字符串的小幅度、左右对齐格局等。默许情状下,
printf并不像echo命令同样会活动增加换行符,必要换行的时候手动增加就能够。

如下:

#!/bin/bash

# 文件名:printf.sh

printf ” %-5s %-10s %-4s\n” No Name Mark

printf ” %-5s %-10s %-4.2f\n” 1 James 80.3456

printf ” %-5s %-10s %-4.2f\n” 2 Wade 90.9876

printf ” %-5s %-10s %-4.2f\n” 3 Yao 88.666

收获如下格式化输出:

美高梅手机版4858 3

%s、%c、%d、%f都以格式替换符,其所对应的参数能够停放带引号的格式字符串之后。

%-5s指明了2个格式为左对齐且宽度为5的字符串替换,-表示左对齐。假如不用-钦定对齐情势,字符串就使用右对齐的章程。宽度内定了保留给有个别变量的字符数。对于Name来说,保留的大幅度时10。由此,任何Name字段的内容都会被展现在十字符宽的区域内,假设内通不足13个字符,余下的则以空格符补充.

对于浮点数,如马克字段,将其格式化为%四.2f,个中.2钦命保留叁个小数位。

每行格式字符串后都有三个换行符(\n)用以换行。

各种各样打印

每一种颜色都有相应的颜色码。举个例子:重新初始化=0,金棕=30,紫色=3一,大青=3二,深紫灰=3三,墨绛红=3肆,浅莲红=3五,乌紫=3陆,金红=37。

echo -e “\e[1;31m This is red text \e[0m”

要设置彩色背景,经常利用的颜色码是:复位=0,水泥灰=40,蛋黄=肆一,桔黄=4二,紫灰=4叁,
青蓝=4四,暗红=4五,深紫=4陆,深灰蓝=四柒。

echo -e “\e[1;42m Green Background \e[0m”

4、使用函数增多意况变量

 

一、简介壹.Bash(Bourne Again Shell),近日大多GNU/Linux系统暗中同意的shell情形。
命令都以在shell终端中输…

>把shell文件作为bash的命令行参数

4、变量

一)普通变量

变量用于存放各样数据,脚本语言日常无需在运用变量前声称其连串,只必要平昔赋值就可以。

在Bash中,各类变量的值都以字符串。在给变量赋值时,无论有未有应用引号,值都会以字符串的款型积攒。

变量能够经过以下办法开展赋值:

var=value

var是变量名,value是赋给变量的值。假设value不含有别的空白字符(如空格),那么就没有需求利用引号举办引用,不然必须采纳单引号或双引号。

只顾:var=value差别于var = value,把var=value写成var =
value是2个大规模的一无所能,前者是赋值操作,后者是十分操作。

在变量名在此以前增进$前缀,就能够打印出变量的原委。

如下:

var=”value”

echo $var

或者

echo ${var}

输出如下:

value

能够在printf或echo命令的双引号中援引变量值。

如下:

#!/bin/bash

# 文件名:variables.sh

fruit=apple

count=5

echo “We have $count ${fruit}(s)”

出口如下:

We have 5 apple(s)

变量

变量能够经过以下办法开展赋值:
var=value

var是变量名,value是赋给变量的值。如果value不含有其他空白字符(举例空格),那么它就没有须要利用引号进行引用,不然必须运用单引号或双引号。
只顾,var = value差别于var=value。把var=value写成var =
value是1个宽广的不当, 但前者是赋值操作,后者则是非常操作。

在变量名在此以前拉长$前缀就能够打印出变量的原委:

var=”value” #给变量var赋值
echo $var
或者
echo ${var}

example:

#!/bin/bash
#文件名:variables.sh
fruit=apple count=5
echo “We have $count ${fruit}(s)”

ghostwu@dev:~/linux/shell$ ls -l
total 4
-rwxrwxr-x 1 ghostwu ghostwu 17 5月  28 18:14 how_to_use_shell.sh
ghostwu@dev:~/linux/shell$ bash how_to_use_shell.sh 
backup    cdrom  home       lib64       mnt    proc  sbin  sys  var
bin    dev    initrd.img  lost+found  opt    root  snap  tmp  vmlinuz
boot    etc    lib       media       patch  run   srv   usr  www
ghostwu@dev:~/linux/shell$ /bin/bash how_to_use_shell.sh 
backup    cdrom  home       lib64       mnt    proc  sbin  sys  var
bin    dev    initrd.img  lost+found  opt    root  snap  tmp  vmlinuz
boot    etc    lib       media       patch  run   srv   usr  www
ghostwu@dev:~/linux/shell$ bash ~/linux/shell/how_to_use_shell.sh 
backup    cdrom  home       lib64       mnt    proc  sbin  sys  var
bin    dev    initrd.img  lost+found  opt    root  snap  tmp  vmlinuz
boot    etc    lib       media       patch  run   srv   usr  www

ghostwu@dev:~/linux/shell$ sh how_to_use_shell.sh 
backup    cdrom  home       lib64       mnt    proc  sbin  sys  var
bin    dev    initrd.img  lost+found  opt    root  snap  tmp  vmlinuz
boot    etc    lib       media       patch  run   srv   usr  www

二)意况变量

有局地自成一家的变量会被shell境况和操作系统遇到用来囤积一些越发的值,那类变量称为情况变量。

情状变量经常用户存款和储蓄路线列表,这一个门路用户寻找可实践文件、库文件等。

情状变量是未在眼下进度中定义,而从父进度中继续而来的变量。

能够行使env命令查看全部与终点相关的意况变量。

对于经过来讲,其运营时的情状变量能够应用如下命令查看:

$ cat /proc/$PID/environ

其间,将PID设置成相关进度的进程ID,PID总是二个平头。

上述命令归来三个含有景况变量以及对应值的列表。每贰个变量以name=value的样式来叙述,相互之间由null字符(\0)分隔。

如果将\0替换成\n,那么就足以将出口重新格式化,使得每一行呈现1组“变量=值”。

轮换能够使用tr命令来落到实处:

$ cat /proc/$PID/environ |tr ‘\0’ ‘\n’

export命令用来设置情形变量。

如下:

$ HTTP_PROXY=192.168.1.100:3128

$ export HTTP_PROXY

施行该命令之后,从当下剧本实施的其余应用程序都会再三再四那么些变量。

暗中同意情况下,有过多标准蒙受变量可供shell使用。如:PATH。

$ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:wq:/root/bin

PATH蒙受变量列出的是种种可推行文件的目录列表,各种目录路线之间以冒号分隔。在施行命令后,shell会自动在PATH遇到变量所蕴藏的目录列表中检索对应的可实践文件。

PATH经常定义在/etc/environment或/etc/profile或~/.bashrc中。

壹经急需在PATH中扩展一条新路线,能够使用:

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

也能够利用:

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

$ export PATH

$ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:wq:/root/bin:/home/user/bin

如此就把/home/user/bin加多到了PATH中。

其它情状变量,如:HOME、PWD、USE凯雷德、UID、SHELL等。

分辨当前所利用的shell,如下:

$ echo $SHELL

/bin/bash

或者

$ echo $0

-bash

获取字符串长度,可食用如下方法:

length=${#var}

如下:

$ var=01234567890123456789

$ echo ${#var}

20

反省是不是为一流用户,通过景况变量UID来检查当前脚本是以最好用户照旧普通用户身份运转的。如:

if [ $UID -ne 0 ];then

    echo Non root user. Please run as root.

else

    echo Root user

fi

root用户的UID是0。

当打开终端可能运维shell时,会看出类似于user@hostname:/home/$的晋升字符串。不一致GNU/Linux发行版中的提醒及颜色略有不相同。

能够利用PS一情况变量来定制提醒文本格式。默许的shell提醒文本时在文书/etc/bashrc中的某一行设置的。

可以选用如下命令列出设置变量PS壹的那一行:

$ cat /etc/bashrc

能够看出类似PS一=”[\u@\h
\W]\\$的字符,\u为用户名,\h为主机名,\w为当前专门的职业目录。

能够修改成自定制的提示字符串。


补充
  • 收获字符串长度
    能够用上面包车型大巴章程得到变量值的长短:

length=${#var}

  • 辨认当前所选择的shell
    能够用上边包车型大巴方法获知当前利用的是哪类shell:

echo $SHELL

  • 检查是或不是为超级用户
    UID是四个重视的情状变量,能够用来检查当前脚本是以最棒用户依旧以普通用户的身价运维的。比如:

If [ $UID -ne 0 ]; then
echo Non root user. Please run as root.
else
echo Root user
fi

 

刺探文化:

1种shell参数扩大情势:

${parameter:+parameter}

举例parameter有值且不为空,则动用parameter的值。


>给shell文件增多可举办权限,作者那边曾经增加过了,使用命令( chmod a+x
脚本文件路线 )

ghostwu@dev:~/linux/shell$ ./how_to_use_shell.sh 
backup    cdrom  home       lib64       mnt    proc  sbin  sys  var
bin    dev    initrd.img  lost+found  opt    root  snap  tmp  vmlinuz
boot    etc    lib       media       patch  run   srv   usr  www
ghostwu@dev:~/linux/shell$ ~/linux/shell/how_to_use_shell.sh 
backup    cdrom  home       lib64       mnt    proc  sbin  sys  var
bin    dev    initrd.img  lost+found  opt    root  snap  tmp  vmlinuz
boot    etc    lib       media       patch  run   srv   usr  www
ghostwu@dev:~/linux/shell$ 

3,单双引号跟php是一致的,单引号不表明变量,双引号会解释变量

ghostwu@dev:~/linux/shell$ echo "learning shell program with ghostwu"
learning shell program with ghostwu
ghostwu@dev:~/linux/shell$ echo 'learning shell program with ghostwu'
learning shell program with ghostwu
ghostwu@dev:~/linux/shell$ echo learning shell program with ghostwu
learning shell program with ghostwu
ghostwu@dev:~/linux/shell$ name=ghostwu
ghostwu@dev:~/linux/shell$ echo $name
ghostwu
ghostwu@dev:~/linux/shell$ echo "$name"
ghostwu
ghostwu@dev:~/linux/shell$ echo '$name'
$name
ghostwu@dev:~/linux/shell$ echo $name
ghostwu

四,-n,不会转义换行符。-e,会转义字符

ghostwu@dev:~/linux/shell$ echo -n "ghostwu"
ghostwughostwu@dev:~/linux/shell$ man echo
ghostwu@dev:~/linux/shell$ echo "1\t2\t3"
1\t2\t3
ghostwu@dev:~/linux/shell$ echo -e "1\t2\t3"
1    2    3

伍,打字与印刷彩色输出

在巅峰中生成异彩纷呈输出卓殊有趣,我们得以利用转义种类来得以实现。
每个颜色都有对应的颜色码。比如:重新初始化=0,莲红=30,栗褐=3一,原野绿=3二,深黄=3三,蓝
色=34,洋红=35,青色=36,白色=37。
要打印彩色文本,可输入如下命令:
echo -e “\e[1;31m This is red text \e[0m”
\e[一;31 将颜色设为中湖蓝, \e[0m 将颜色重新置回。只须要将 3一替换到想要的颜色码就能够了。
要安装彩色背景,平常接纳的颜色码是:重新载入参数=0,深蓝=40,湖蓝=4壹,石榴红=42,玉绿=肆叁,
蓝色=44,洋红=45,青色=46,白色=47。
要打字与印刷彩色文本,可输入如下命令:
echo -e “\e[1;42m Green Background \e[0m”

ghostwu@dev:~/linux/shell$ echo "\e[1;31m Hello Ghostwu \e[0m"
\e[1;31m Hello Ghostwu \e[0m
ghostwu@dev:~/linux/shell$ echo -e "\e[1;31m Hello Ghostwu \e[0m"
 Hello Ghostwu 
ghostwu@dev:~/linux/shell$ echo -e "\e[1;31mHello Ghostwu \e[0m"
Hello Ghostwu 
ghostwu@dev:~/linux/shell$ echo -e "\e[1;31mHello Ghostwu \e[0m!"
Hello Ghostwu !

其1要截图,技能见到效果

美高梅手机版4858 4

美高梅手机版4858 5

变量:

在Bash中,每3个变量的值都以字符串。
无论你给变量赋值时有没有使用引号,值都会以字符串的款式储存

伍,反引号(数字一左方的那三个键),表示援引命令的举行结果

ghostwu@dev:~/linux/shell$ ls
how_to_use_shell.sh
ghostwu@dev:~/linux/shell$ str=`ls`
ghostwu@dev:~/linux/shell$ echo $str
how_to_use_shell.sh

ghostwu@dev:~/linux/shell$ echo str
str

专注:echo $str 与 echo str。前边表示str变量,前面表示字符串str

反引号的另1种等价写法,用小括号括起来: $()

ghostwu@dev:~/linux/shell$ echo str2
str2
ghostwu@dev:~/linux/shell$ str2=$(ls)
ghostwu@dev:~/linux/shell$ echo $str2
how_to_use_shell.sh

str2=$(ls):获得ls命令实行后的结果赋值给str2这一个变量【注意:变量=值,
表示变量赋值,也许改写变量的值,要利用变量的值(访问变量的值)在变量前边用$】

ghostwu@dev:~/linux/shell$ str=`date "+%F"`
ghostwu@dev:~/linux/shell$ echo $str
2018-05-28

ghostwu@dev:~/linux/shell$ str2=$(date "+%F")
ghostwu@dev:~/linux/shell$ echo $str2
2018-05-28

变量引用的运用:可以把变量重返的值,拿来作为别的的行使,如时间的再次回到值,常用来备份文件

ghostwu@dev:~/linux/shell$ tar czvf `date "+%F"`_shell.tar.gz how_to_use_shell.sh 
how_to_use_shell.sh
ghostwu@dev:~/linux/shell$ ls
2018-05-28_shell.tar.gz  how_to_use_shell.sh

陆,引用命令行的参数,用$1..$玖,大于拾用大括号括起来,如:${10} 

ghostwu@dev:~/linux/shell/how_to_use_var$ cat var.sh 
#!/bin/bash
echo $1 $2 $3 ${10}
ghostwu@dev:~/linux/shell/how_to_use_var$ bash var.sh {a..z}
a b c j

给var.sh传入2五个字母作为参数, a—>$一,b—>$贰, c—–>$三,
j—->$10

7,$0代表脚本本人

>借使用bash单纯实践脚本,$0正是本子的名号

>假使用全路径执行脚本,那么$0就是本子的名称+路线

ghostwu@dev:~/linux/shell/how_to_use_var$ bash var.sh 
var.sh
ghostwu@dev:~/linux/shell/how_to_use_var$ bash ~/linux/shell/how_to_use_var/var.sh 
/home/ghostwu/linux/shell/how_to_use_var/var.sh

八,dirname获取脚本的门径,basename获取脚本名称

ghostwu@dev:~/linux/shell/how_to_use_var$ dirname ~/linux/shell/how_to_use_var/var.sh 
/home/ghostwu/linux/shell/how_to_use_var
ghostwu@dev:~/linux/shell/how_to_use_var$ basename ~/linux/shell/how_to_use_var/var.sh 
var.sh

9,$# 获取参数的个数

ghostwu@dev:~/linux/shell/how_to_use_var$ cat var.sh 
#!/bin/bash
echo $#
ghostwu@dev:~/linux/shell/how_to_use_var$ bash var.sh {a..j}
10

十,推断参数的个数,给出一些提醒音讯 

ghostwu@dev:~/linux/shell/how_to_use_var$ bash var2.sh a
usage:/bin/bash var2.sh arg1 arg2
ghostwu@dev:~/linux/shell/how_to_use_var$ bash var2.sh a b
a b
ghostwu@dev:~/linux/shell/how_to_use_var$ cat var2.sh 
#!/bin/bash
if [ $# -ne 2 ]
    then
        echo "usage:/bin/bash $0 arg1 arg2"
        exit 1
fi
echo $1 $2

1一,set — 设置岗位参数,跟命令行传参差不多

ghostwu@dev:~$ set -- hello ghost wu
ghostwu@dev:~$ echo $#
3
ghostwu@dev:~$ echo $1
hello
ghostwu@dev:~$ echo $2
ghost
ghostwu@dev:~$ echo $3
wu

12,$@, $*,不加引号时,输出全数参数

ghostwu@dev:~$ set -- hello ghost wu
ghostwu@dev:~$ echo $#
3
ghostwu@dev:~$ echo $1
hello
ghostwu@dev:~$ echo $2
ghost
ghostwu@dev:~$ echo $3
wu
ghostwu@dev:~$ echo $*
hello ghost wu
ghostwu@dev:~$ echo $@
hello ghost wu
ghostwu@dev:~$ for i in $*; do echo $i; done
hello
ghost
wu
ghostwu@dev:~$ for i in $@; do echo $i; done
hello
ghost
wu

加双引号时,在循环遍历的场馆下:”$*” 全部参数作为四个参数。
“$@”输出全数参数

ghostwu@dev:~$ echo "$*"
hello ghost wu
ghostwu@dev:~$ echo "$@"
hello ghost wu
ghostwu@dev:~$ for i in "$*"; do echo $i; done
hello ghost wu
ghostwu@dev:~$ for i in "$@"; do echo $i; done
hello
ghost
wu

上边包车型地铁事例,也正是加引号的 “$@” 

ghostwu@dev:~$ for i;do echo $i; done
hello
ghost
wu

shift:将地点参数左移

ghostwu@dev:~$ echo $# $1 $2 $3
3 hello ghost wu
ghostwu@dev:~$ shift
ghostwu@dev:~$ echo $# $1 $2 $3
2 ghost wu

一叁,$? 获取上一条命令的实践景况再次回到值( 0 为打响,非0为失败 )

ghostwu@dev:~$ pwd
/home/ghostwu
ghostwu@dev:~$ echo $?
0
ghostwu@dev:~$ cd /root
bash: cd: /root: Permission denied
ghostwu@dev:~$ echo $?
1

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有