什么是shell?
在linux软硬件操作系统中,应用程序其实是在操作系统的最外层,就如同鸡蛋的外壳一样,因此这个shell也被称呼为壳程序
linux很多命令如 man, chmod, chown, vi, fdisk,mkfs 等指令,这些指令都是独立的应用程序, 但是我们可以通过shell程序 (就是命令行界面) 来操作这些应用程序,让这些应用程序调用核心来运行所需的工作.
也就是说,只要能够操作应用程序的接口都能够称为shell程序。狭义的shell程序指的是命令行方面的软件,包括bash 等。 广义的shell程序则包括图形接口的软件!因为图形接口其实也能够操作各种应用程序来调用核心工作
命令别名设置功能:(alias)
可以通过alias为某个程序设置别名,eg:
alias lm='ls -l'
这样可以使用lm 查看当前文件夹下的内容
查询指令是否为 Bash shell 的内置命令: type
type 后面跟可执行文件bash
使用斜杠做转义
cp 1.txt 2.txt \
S_1X.txt test/
把1.txt、2.txt、 S_1X.txt复制到当前目录的test文件夹下由于命令太长,则通过\键把命令分开为2行,
让 [Enter] 按键不再具有“开始执行”的功能 因为 \ 仅转义“紧接着的下一个字符”而已!所以,万一我写成:“ \ [Enter] ”,即 [Enter] 与反斜线中间有一个空格时,则 \ 转义的是“空格”而不是 [Enter]按键!这一点很重要
在命令行模式下的小技巧
[ctrl] + u 向前删除命令, [ctrl]+k 向后删除命令
[ctrl]+a 让光标移动到整个指令串的最前面 ,[ctrl]+e(让光标移动到整个指令串的最后面
通过echo 输出变量的内容
echo ${varName}
变量的设置规则
等号两边不能直接接空白字符
若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量: “export PATH”
取消变量的方法为使用 unset :“unset 变量名称”例如取消 myname 的设置: “unset myname”
包含特殊字符时
myname="lyh's“
name=VBird\‘s\ name 转义
eg:
什么是“子程序”呢?就是说,在我目前这个 shell 的情况下,去启用另一个新的 shell ,新的那个 shell 就是这个程序的子程序啦!在一般的状态下,父程序的自订变量是无法在子程序内使用的。但是通过 export 将变量变成环境变量后,就能够在子程序下面应用了!
反单引号`(键盘1旁边的那个)的作用和用法
eg:如何进入到您目前核心的模块目录?[dmtsai@study ~]$ cd /lib/modules/`uname -r`/kernel[dmtsai@study ~]$ cd /lib/modules/$(uname -r) /kernel # 以此例较佳!
建议使用 $(command ) ,类似于1*2*3*(4+5) 当计算到括号时先计算括号里面的再把计算的结果作为外部程序的输入
几个重要的知识点
双引号:如果其中有变量则显示变量的值
单引号:按照单引号内部的字符原样显示
转义字符:使斜杠后面的特殊字符不再具有原来的左右
钱字符$: 代表当前程序的id 使用 echo $$就可以输出当前程序的id即pid
反单引号:先执行其中的命令,在一串指令中,在 之内的指令将会被先执行,而其执行出来的结果将做为外部的输入信息
问号?:上一个命令的回传值,通过$? 获取上一条命令是否执行成功,0代表成功,否则失败
程序与子程序的概念
如上所示,我们在原本的 bash 下面执行另一个 bash ,结果操作的环境接口会跑到第二个bash 去(就是子程序) , 那原本的 bash 就会在暂停的情况 (睡着了,就是 sleep) 。整个指令运行的环境是实线的部分!若要回到原本的 bash 去, 就只有将第二个 bash 结束掉(下达 exit 或 logout) 才行。。这个程序概念与变量有啥关系啊?关系可大了!因为子程序仅会继承父程序的环境变量, 子程序不会继承父程序的自订变量啦!所以你在原本 bash 的自订变量在进入了子程序后就会消失不见, 一直到你离开子程序并回到原本的父程序后,这个变量才会又出现!换个角度来想,也就是说,如果我能将自订变量变成环境变量的话,那不就可以让该变量值继续存在于子程序了? 呵呵!没错!此时,那个 export 指令就很有用啦!如你想要让该变量内容继续的在子程序中使用,那么就请执行:export 变量名称