Linux|熟悉Linux Shell

查看当前有哪些用户登录系统
who
who | wc -l
1)Shell 与程序
type命令有助于你了解哪些是shell的内置命令,哪些是Linux提供的外部程序
type who
type cd
1.1)bash Shell
通配符(wildcard)可以匹配文件的名字;“历史命令(command history)”可以快速地调用以前使用的命令;管道(pipe)可以将一个命令的输出作为另一个命令的输入;变量(variable)存储shell用到的数据
1.1.1)通配符
1.1.2)shell变量
可以像下面这样定义变量的值:
$ MYVAR=3
引用该变量时,只需要在变量名前添加“$”符号:
$ echo $MYVAR
3
通常在你登录时,有些预定义的变量就会自动生效。
Linux|熟悉Linux Shell
文章图片

显示所有shell变量的命令是运行:
$ printenv
变量的默认作用范围只包括定义该变量的shell本身。要使变量作用范围涵盖被shell调用的程序(比如subshells),必须使用export命令定义变量:
$ export MYVAR
或者同时完成变量的定义及赋值:
$ export MYVAR=3
这样定义的变量就是所谓的环境变量(environment variable),因为它的作用范围涵盖当前shell环境下所有程序。因此,上述例子中,变量MYVAR可以被其所在的shell环境下所有正在运行的程序使用(包括shell脚本)。
如果需要变量仅对于特定的命令有效,并且该命令结束后变量立刻回到原值,则必须在命令行的开头加上variable=value:
$ echo $HOME
/home/smith
$ HOME=/home/sally printenv HOME
/home/sally
$ echo$HOME
/home/smith//原先的值不受影响
1.1.3)搜索路径
【Linux|熟悉Linux Shell】环境变量PATH用于告诉shell到哪里去寻找:
$ echo $ PATH
shell在这些目录中逐个搜索,查找程序,找到后即运行。如果所有目录中均未找到指定程序,它将返回如下提示:
bash: xxx: command not found
若要临时增加目录到shell的搜索路径中,需要修改PATH变量的值。例如,将/usr/sbin加入shell的搜索路径,需要进行如下操作:
$ PATH=$PATH:/usr/sbin
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/smith/bin:/usr/sbin
这些操作只能改变当前shell的搜索路径。要永久改变,需要修改配置文件~/.bash_profile中的PATH变量,然后重新登录。
1.1.4)命令别名

内置命令alias用于定义命令的别名,让你用较短的字符串代替一长串常用的复杂命令。比如:
$ alias ll='ls-l'
定义了新的命令ll,它代表命令“ls -l”,ll命令运行如下:
$ ll
total 436
-rw-r--r--1 smith 3584Oct1114:59file1
-rwxr-xr-x1 smith72Aug623:04file2…
无论你何时登录系统,~/.bashrc文件中定义的别名都是有效的。alias命令可以列出所有已定义的别名。

1.1.4)输入/输出重定向
Shell可以将标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)重定向为文件。也就是说,任何命令都可以用shell的“<”操作符将输入数据来源从stdin重定向为文件,比如:mycommand < infile
任何命令都可以将数据输出的目的地从stdout重定向为文件。
$ mycommand> outfile//创建或覆盖outfile
$ mycommand>> outfile//附加到outfile原有内容的末尾
一个命令也能够将stderr重定向到文件,同时仍然将写入标准输出的内容打印在屏幕上:
$ mycommand2> errorfile
下面的命令将stdout及stderr都重定向到文件:
$ mycommand> outfile2> errorfile //输出到不同文件
$ mycommand>& outfile//输出到一个文件

1.1.5) 管道

1.1.6) 组合命令

1.1.7)界定

1.1.8) 编辑命令行

1.1.9) 命令历史记录

Linux|熟悉Linux Shell
文章图片

Linux|熟悉Linux Shell
文章图片

1.1.10) 文件补齐
1.1.11) shell任务控制
结束运行中的命令
cat bigfile
要终止后台运行的程序,可以先用fg命令将其放到前台,然后再按下^C;或者,使用kill命令终止它运行
终止shell运行的方法有两个:执行exit命令或按^D
exit
以上:
准确地说,是共有多少个shell被启动。如果有用户同时启动了两个shell,who所汇报的行数就不等于实际使用系统的人数。
有些系统启动时使用独立的别名定义文件,如~/.bash_aliases。返回单引号中,$HOME被视为字符串;双引号中,$HOME被视为变量,并展开为它实际的值。
^D会向许多读取标准输入的程序发送“文件结束”的消息。因此,在这种情况下,结束的可能是shell所运行的程序,而不是shell本身。

    推荐阅读