【shell编程基础1】shell变量篇

Bash shell

bash shell 是bourne shell 的升级版,“bourne again shell”.ubuntu的默认shell。

  • 预备知识

1. "#!" 名为“sha-bang”,shell编程的开始。本质是一个2字节的文件特殊标记,加上这个能够让系统知道这个是一个科执行的脚本。具体参考man magic.这里注意 "#!"后边的路径必须正确。

2. 执行脚本:

(1)可以使用chmod给.sh文件加上可执行权限,然后直接使用 ./script.sh 来执行该脚本。

(2)使用 "bash script.sh"来直接执行。

(3)使用source执行

3. 查看电脑支持哪些shell cat /etc/shells

 

 本文主要讲解shell变量的创建,变量设置规则,还有环境变量。


 本文的知识主要来自《鸟哥的私房菜》

  • shell变量

  1. 变量的读写

读变量:用 $变量名 或者 ${变量名} 来读取变量的内容

写变量:用 “=”连接变量名和他的内容

  1. 变量设置的规则
  • 以 “=” 相连,但是不能有空格
  • 存在空格的时候,使用双引号“”或者单引号‘’将变量内容结合。双引号内部保留特殊字符的性质,单引号则不保留,一律视为纯文本。
  • 转义字符 \ 针对特殊字符
  • 变量内容有其他的命令提供,则使用$(命令) 或者 命令 注意后的这个是反引号
  • 增加变量的内容 PATH=$PATH:/home/bin
  • 使用export设置为环境变量

uname -r 获取当前linux的内核版本

下图中的代码可以看出双引号和单引号的差别:

  • 环境变量的功能

env 或者 export 来查看环境变量的内容

一些常用的变量:

变量名字意义
PS1 设置命令提示符的名字
$ 目前shell的进程号
关于上一个执行命令的回转码
$0 程序名字
$1-$9 程序参数

这里可以使用PS1来修改为自己喜欢的命令提示符。

文件:用户目录下的 ~/.bashrc 环境变量:PS1

我的修改:PS1='\u@\h \A ##:\w$ ' 将这个修改写到~/.bashrc文件下面,以后命令提示符就一直都是自己喜欢的那个样子了。

子进程只继承父进程的环境变量,子进程不会继承父进程的自定义变量。export可以将自定义变量设置为环境变量。

语系变量使用 locale命令来设置和查看

  • 从键盘读取的变量

  1. read
read -pt
-p 后面接提示符,告诉用户输入什么值
-t 后面接等待的秒数。不一直等待用户
  1. declare/typeset 声明变量的类型
-a 将变量声明为数组类型
-i 将变量声明为整数类型
-x 等同于export,将变量声明为环境变量
-r 将变量设置为热爱动力与类型

 

这里需要说明的是,shell中的变量缺省类型是字符串类型的。 declare +x 可以取消其环境变量属性。

 

  • 变量删除,替代与替换
#从头开始
${变量#关键字}    从头开始数据匹配关键词,则将符合关键词最短的删除
${变量##关键词}    从头开始数据匹配关键词,则将符合关键词最chang的删除

#从尾开始
${变量%关键字}    从尾开始数据匹配关键词,则将符合关键词最短的删除
${变量%%关键词}    从尾开始数据匹配关键词,则将符合关键词最chang的删除

#替换
${变量/旧字符串/新字符串}  替换一个
${变量//旧字符串/新字符串}  替换多个

 

变量的测试和内容替换

变量设置的方式   str没有设置 str为空字符串 str已经设置,并且非空
var=${str-expr} var=expr var= var=$str
var=${str:-expr} var=expr var=expr var=$str
var=${str+expr} var= var=expr var=expr
var=${str:+expr} var= var= var=expr
var=${str=expr}

str=expr

var=expr

str不变

var=

str不变

var=$str

var=${str:=expr}

str=expr

var=expr

str=expr

var=expr

str不变

var=$str

var=${str?expr} expr输出到stderr var= var=str
var=${str:?expr} expr输出到stderr expr输出到stderr var=str
posted @ 2016-03-23 22:57  _Leo_H  阅读(327)  评论(0编辑  收藏  举报