重新学习Bash脚本(一)
重新学习Bash脚本(一)
shell,即操作系统的CLI界面,是接收用户输入,调用操作系统内核功能的交互环境。
bash是目前linux上使用最普遍的shell,曾经还有cshell, zshell等等shell,不过都淘汰了。虽然我不喜欢bash的大奇葩语法、看起来像乱码的命令、啥都用字符串传来传去的习惯,但没办法,普及率高啊。就像ie用户多也就需要前端来兼容ie,其实前端人员一个都不喜欢ie。
我非常看好powershell成为新一代跨平台的shell,面向对象、跨平台、强弱类型支持、命令语义化、在线帮助文档等等牛逼功能,用起来和写脚本都比bash好太多了。微软加油啊,为民除害天经地义。
黑屁有点多,现在开始学习bash。
Bash Terminal功能
- history:上下键寻找历史命令
- tab:自动补全
- ctrl+a/ctrl+e:将光标移动至最前面/最后面
- ctrl+u/ctrl+k:向前/向后删除命令串
变量
-
取值:
${}
运算符,用echo
命令打印出来。$ echo ${PATH} #建议使用这种,为了和命令取值分开 $ echo $PATH
-
赋值:
=
运算符,赋值为字符串- 若有空格,可以用
""
或''
包裹起来 - 双引号中的
$
取值会生效,单引号中不会生效 - 对特殊字符可以用
\
转义 - 命令取值用
$()
$ version=$(uname -r) $ echo ${version} 4.15.0-30deepin-generic $ version=${version}:QE 4.15.0-30deepin-generic:QE
- 若有空格,可以用
-
删除变量 使用
unset
-
使用
$ cd ${HOME} $ cd $(pwd)/..
-
read
命令-用变量接收输入$ read -p input: var input:123456 $ echo ${var} 123456
环境变量
- 环境变量是什么:在每个shell seesion中都有的变量,作用于一些命令和程序的变量。
- 将普通变量导出(成为环境变量)
export
。 - 查看所有的环境变量:env;同时这个指令也可以设置一些环境变量去运行命令,而不影响当前的环境变量
- 比较重要的环境变量:
- HOME 相当于
~
- SHELL 如果用bash就是
/bin/bash
- PATH 命令/文件查找路径
- RANDOM 系统随机数种子
- PS1:提示字符格式,可以自己设置
- ?:上一条命令的返回值
- HOME 相当于
变量类型
之前操作的变量都是默认类型:字符串,实际上字符串也是Bash中最常用的数据类型,大部分命令的接收参数和返回值都是字符串。
然而Bash中是有别的数据类型的,数据类型通过declare
命令声明类型变量,共有:
-a
: Array-i
: Integer-x
: Export (环境变量字符串)-r
: readonly
其中数字类型会对四则运算有功能,不再举例。
数组类型用法:
$ declare -a arr
$ arr[3]=hello
$ echo ${arr[3]}
hello
Bash执行环境
-
Bash的指令执行顺序基本上可以概括为:
- 若为以路径的命令,比如
./a.out
,则直接调用
- 若为以路径的命令,比如
-
若否,则查找顺序为:别名=>bash内置命令=>
$PATH
下的可执行文件 -
别名:创建一个命令(为一个命令取别名)
alias
命令和unalias
命令$ alias cls='clear' # cls是PowerShell的清屏命令,拿来举个例子 $ cls
-
命令历史:除了按上下键,还有一个命令记录bash的历史,就是
history
命令,命令还支持导入/导出命令记录$ history 10 # 输出最近10条记录
还有一个命令
!
,意思为执行第n条指令(由history
命令查出的序号)$ !! #执行上一条指令 $ !1577 #执行1577指令 $ !vi #执行第一个开头为vi的指令,比如vim
历史命令会存入
~/.bash_history
文件中。 -
环境配置文件
-
bash启动欢迎信息:
/etc/issue
-
profile文件:
每次启动bash的时候都会先去执行的文件,可以在里面设置一些别名、环境变量、提示符等等环境信息。
这个不用的发行版区别还挺大的,但大部分都有:
/etc/profile
这个配置文件,一般来说改这个是可以作用到全局的。我的deepin改/etc/bash.bashrc
这个也行。
-
-
tty相关
- tty:虚拟终端,在一个显示器上虚拟多终端,用于多任务,比如第一个终端在下载东西,换到第二个终端继续敲命令。
- 启动不同的tty环境:alt+ctrl+[f1~f6]
- 设置tty相关设定,比如快捷键,行列长度等:
stty
命令(其实真的用的超级少)