seo外包网站,网络规划设计师教程第二版 pdf下载地址,网站建设销售ppt模板,建站模板推荐〇、更新记录
20230926 补充例子2
一、前言
由于Linux系统的shell有许多种#xff1a;sh、bash、cshell、tcsh、zsh……这些shell以sh为基础对象#xff0c;在保持兼容性时又各有有创建#xff0c;形成自己的功能特点#xff0c;要想让我们编写的shell代码正确、可靠运行…〇、更新记录
20230926 补充例子2
一、前言
由于Linux系统的shell有许多种sh、bash、cshell、tcsh、zsh……这些shell以sh为基础对象在保持兼容性时又各有有创建形成自己的功能特点要想让我们编写的shell代码正确、可靠运行我们首先应该了解我们的目标系统在登陆后默认使用的是哪个shell也就是我是谁 | whoami?
二、示例约定
从现在开始我们就要逐步学习在终端中输入和执行linux命令并根据需要进行编程这与DOS是相似的。
按照DOS下的惯例我们在命令提示符后通过键盘输入命令并按下Enter来执行。我们输入的的命令将使用下划线标注。
三、who am i
linux提供了who am i 或 whoami命令不过命令的功能用来查询当前登陆系统的帐号信息。
所以如果我们要查询当前使用的shell类型实际上使用的是其它命令和方法。
要查询我们当前使用的shell类型有很多种方法有些很直接一步到位有些方法则需要绕一些通过几个命令配合实现或者不那么直观有些则不太靠谱。
一最直接的方法
要想知道我们当前使用的shell类别比较好的方法是使用命令 echo $0 其中$0的含义要看具体应用场合像上面这样在命令行中使用它代表的是Shell本身的PIDProcessID btw如果是在脚本中使用$0表示脚本名称或函数名称。
1.例子1 [rootlocalhost ~]# echo $0 sh 可以看到我们当前使用的shell是历史最悠久的sh……其中[rootlocalhost ~]#是Linux系统终端的命令提示符它的格式内容是可以自定义的我们将会在以后学习。
2.例子2 usermyhost:~echo $0 bash 可以看到我们当前使用的shell是大多数系统默认的bash……其中usermyhost:~是Linux系统终端的命令提示符其内容跟例1是不同的因为它的格式内容是可以自定义的自定义的方法我们将会在以后学习。
二有点绕的办法
之所以说有点绕是因为我们不能一步到位需要执行两条命令
第一条命令 echo $$ 这条命令将显示Shell本身的PIDProcessID
1.例子1 [rootlocalhost ~]# echo $$ 64 在上面这个例子中我们可以知道当前进程ID是64。 接下来我们执行第二条命令 ps 这条命令用于显示当前进程的信息类似于 Windows 系统中的控制台命令tastlist例如 [rootlocalhost ~]# ps PID USER COMMAND 1 root {init} /bin/sh /sbin/init 2 root [kthreadd] 3 root [kworker/0:0] 4 root [kworker/0:0H] 5 root [kworker/u2:0] 6 root [mm_percpu_wq] 7 root [ksoftirqd/0] 8 root [kdevtmpfs] 9 root [netns] 10 root [oom_reaper] 11 root [writeback] 12 root [crypto] 13 root [kblockd] 14 root [kswapd0] 15 root [kworker/0:1] 32 root [khvcd] 33 root [kworker/0:2] 43 root dhcpcd 56 root [kworker/u2:1] 64 root sh -l 66 root ps 从ps命令显示的进程信息中我们可以看到PID等于64的进程信息是 64 root sh -l 这样我们就知道我们现在用的shell是历史最悠久的sh……
2.例子2 usermyhost:~echo $$ 14559 usermyhost:~ps PID TTY TIME CMD 6554 pts/0 00:00:00 ps 14559 pts/0 00:00:00 bash usermyhost:~ 在第2个例子中我们先查询到当前进程ID是14559然后我们通过ps命令查询到PID等于14559的进程信息是bash。
三 不那么直观的方法
通过cat命令 查看/etc/passwd文件信息 cat /etc/passwd 从而了解用户的登录Shell类型。
1.例子1 [rootlocalhost ~]# cat /etc/passwd cat /etc/passwd root:x:0:0:root:/root:/bin/sh daemon:x:1:1:daemon:/usr/sbin:/bin/false bin:x:2:2:bin:/bin:/bin/false sys:x:3:3:sys:/dev:/bin/false sync:x:4:100:sync:/bin:/bin/sync mail:x:8:8:mail:/var/spool/mail:/bin/false www-data:x:33:33:www-data:/var/www:/bin/false operator:x:37:37:Operator:/var:/bin/false nobody:x:99:99:nobody:/home:/bin/false 从中我们可以看到root帐户登陆系统后使用的shell是sh。 为了更直观一些我们可以使用 管道操作 利用grep命令搜索包含字符串root的行即 cat /etc/passwd | grep ^root 例如 [rootlocalhost ~]# cat /etc/passwd | grep ^root cat /etc/passwd | grep ^root root:x:0:0:root:/root:/bin/sh 命令执行后系统只显示包含字符串root的信息。 2.例子2 usermyhost:~cat /etc/passwd | grep ^user user:x:1002:1002:,,,:/home/user:/bin/bash 在这个例子中我们可以看到当前使用的shell是bash 四不那么靠谱的方法
这种办法主要是用环境变量$SHELL。如 echo $SHELL $SHELL的值被设置为你的默认 shell 的完整路径当你在终端中调用不同的 shell时$SHELL的值并不会随之改变它始终指向你的默认 shell 的完整路径。
实例 usermyhost:~echo $SHELL /bin/bash usermyhost:~exec dash \umyhost:\wecho $0 dash \umyhost:\wecho $SHELL /bin/bash 在上面的例中我们首先使用echo $SHELL命令查询到系统默认的shell是bash
然后我们使用exec dash命令将shell改为dash
接着我们使用echo $0命令证明我们当前使用的shell是dash
但是我们再次使用echo $SHELL命令查询环境变量$SHELL的值并没有变成dash仍然是默认的bash。
需要注意的是$SHELL中的英文字母是大写的。也就是说linux中的环境变量名称是区分大小英文字母的。$SHELL和$shell是两个环境变量。