重新学习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命令(其实真的用的超级少)