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变量
变量的读写
读变量:用 $变量名 或者 ${变量名} 来读取变量的内容
写变量:用 “=”连接变量名和他的内容
变量设置的规则
- 以 “=” 相连,但是不能有空格
- 存在空格的时候,使用双引号“”或者单引号‘’将变量内容结合。双引号内部保留特殊字符的性质,单引号则不保留,一律视为纯文本。
- 转义字符 \ 针对特殊字符
- 变量内容有其他的命令提供,则使用$(命令) 或者
命令
注意后的这个是反引号 - 增加变量的内容 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命令来设置和查看
从键盘读取的变量
read
read -pt
-p 后面接提示符,告诉用户输入什么值
-t 后面接等待的秒数。不一直等待用户
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 |