Linux下shell编程基础知识

1、history    记录历史命令;
预设记录1000条命令,存储在用户家目录 .bash_history 文件中;
!!    执行上一条命令
!n    n为数字,history里面显示的指令数字
!cat    执行最近一次以cat开头的命令
!$    上一条命令的最后一个参数

man builtin    可以查询系统内置的所有命令;

2、指令和文件名补全
Tab键    连续按2次列出所有的指令或文件名;

3、别名alias
自定义别名,把很长的经常使用的命令别名一个简单的命令
[root@linuxidc ~]# alias yong="cat /etc/sysconfig/network-scripts/ifcfg-eth0"
[root@linuxidc ~]# yong
DEVICE=eth0
HWADDR=00:0C:29:43:3D:32
TYPE=Ethernet
UUID=0b1f4512-cefa-4a9e-ae85-adb2ac2a9903
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.20.20
NETMASK=255.255.255.0
GATEWAY=192.168.20.2

unalias    解除别名
别名永久生效的话,把命令写入到当前用户家目录 .bashrc里面;只对当前用户生效。


4、通配符
*    代表零个或多个任意字符
?    代表1个任意字符


5、输入输出重定向
输出重定向 >
把前面的输出不显示在当前屏幕上,输出到指定文件里面;
追加重定向 >> 把内容追加到文件里面;
输入重定向 <    把后面的文件作为前面命令的输入;
2>        错误重定向(写脚本的时候会用到)
2>>    错误追加重定向
[root@localhost ~]# ls -l /dev/stdin 
lrwxrwxrwx. 1 root root 15 4月  6 11:04 /dev/stdin -> /proc/self/fd/0
[root@localhost ~]# ls -l /dev/stdout 
lrwxrwxrwx. 1 root root 15 4月  6 11:04 /dev/stdout -> /proc/self/fd/1
[root@localhost ~]# ls -l /dev/stderr 
lrwxrwxrwx. 1 root root 15 4月  6 11:04 /dev/stderr -> /proc/self/fd/2

标准输入设备stdin用0表示;键盘;

标准输出设备 stdout用1表示,显示器显示;
标准输出错误 stderr用2表示,显示器显示;


示例:直接ls 会在当前屏幕显示出来,正确和错误的信息;
[root@localhost ~]# ls /etc/passwd /etc/passwd1
ls: 无法访问/etc/passwd1: 没有那个文件或目录
/etc/passwd
[root@localhost ~]# ls /etc/passwd /etc/passwd1 >1.log 2>&1
[root@localhost ~]# cat 1.log
 ls: 无法访问/etc/passwd1: 没有那个文件或目录
 /etc/passwd

正确输出1默认可以不用写,直接重定向到1.log里面,2代表错误输出,重定向到&1代表前面的1.log;有时候也可以>>追加到日志;

[root@localhost ~]# ls /etc/passwd /etc/passwd1 
&>all.log
[root@localhost ~]# cat all.log 
ls: 无法访问/etc/passwd1: 没有那个文件或目录
/etc/passwd

&表示所有,包括正确输出1和错误输出2,输出重定向到all.log里面;

6、管道符 |
把前面命令的输出结果作为后面命令的输入
[root@linuxidc ~]# cat /etc/passwd | wc -l
25

7、作业控制
当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c)
jobs    可以查看被暂停或在后台运行的任务
[root@linuxidc ~]# vmstat 1 > /tmp/1.log 
^Z
[1]-  Stopped                vi file
[2]+  Stopped                vmstat 1 > /tmp/1.log
[root@linuxidc ~]# jobs
[1]-  Stopped                vi file
[2]+  Stopped                vmstat 1 > /tmp/1.log
[root@linuxidc ~]# bg 2
[2]+ vmstat 1 > /tmp/1.log &
[root@linuxidc ~]# jobs
[1]+  Stopped                vi file
[2]-  Running                vmstat 1 > /tmp/1.log &

想要让进程在后台运行的话加 &,中间有空格,进程就在后台运行了。

vmstat 1    用来观察系统状态的一个命令。
fg 2 让后台运行的进程回到当前运行,ctrl+c 可以终止进程。
+号显示的为优先级最高。


另一种情况,关闭当前shell,重新打开另一个shell,使用jobs并不会显示在后台运行的进程。想要停止进程的话,需要知道pid,然后使用kill命令杀死进程。如遇到杀不死的进程,使用 kill -9 pid
[root@linuxidc ~]# ps aux | grep vmstat
root      1909  0.0  0.1  2016  548 pts/0    S    15:03  0:00 vmstat 1
root      1941  0.0  0.1  4356  732 pts/0    S+  15:08  0:00 grep vmstat
[root@linuxidc ~]# kill 1909

8、变量,就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5595799b2467a04d371ab2413de8428a.html