网站首页 > 开源技术 正文
查看 Shell
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
查看当前默认的shell
$ echo $SHELL
/bin/bash
不同的 Linux 发行版使用的提示符格式不同。例如在 CentOS 中, 默认的提示符格式为:
Shell提示符:#和$
[root@localhost ~]$
这种格式包含了以下三个方面的信息:
启动 Shell 的用户名, 也即 root;
本地主机名称, 也即 localhost;
当前目录, 波浪号~是主目录的简写表示法。
Shell 通过PS1和PS2两个环境变量来控制提示符格式:
PS1 控制最外层命令行的提示符格式。
PS2 控制第二层命令行的提示符格式。
在 Shell 中初次输入命令, 使用的是 PS1 指定的提示符格式;如果输入一个命令后还需要输入附加信息, Shell 就使用 PS2 指定的提示符格式。请看下面的例子:
[root@localhost ~]# echo "
> yan
> cheng
> sheng
> "
yan
cheng
sheng
echo 是一个输出命令, 可以用来输出数字、变量、字符串等;本例中, 我们使用 echo 来输出字符串。
字符串是一组由" "包围起来的字符序列, echo 将第一个"作为字符串的开端, 将第二个"作为字符串的结尾。此处的字符串就可以看做 echo 命令的附加信息。
本例中, 前两次使用 echo 命令时都是在后面紧跟字符串, 一行之内输入了完整的附加信息。
第三次使用 echo 时,将字符串分成多行, echo 遇到第一个"认为是不完整的附加信息, 所以会继续等待用户输入, 直到遇见第二个"。
输入的附加信息就是第二层命令, 所以使用>作为提示符。
要显示提示符的当前格式, 可以使用 echo 输出 PS1 和 PS2:
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
[root@localhost ~]# echo $PS2
>
Shell 使用以\为前导的特殊字符来表示命令提示符中包含的要素, 这使得 PS1 和 PS2 的格式看起来可能有点奇怪。下表展示了可以在 PS1 和 PS2 中使用的特殊字符。
Bash shell 提示符可以包含的要素
Bash shell 提示符可以包含的要素
字符 描述
\a 铃声字符
\d 格式为"日 月 年"的日期
\e ASCII转义字符
\h 本地主机名
\H 完全合格的限定域主机名
\j shell当前管理的作业数
\1 shell终端设备名的基本名称
\n ASCII换行字符
\r ASCII回车
\s shell的名称
\t 格式为"小时:分钟:秒"的24小时制的当前时间
\T 格式为"小时:分钟:秒"的12小时制的当前时间
\@ 格式为am/pm的12小时制的当前时间
\u 当前用户的用户名
\v bash shell的版本
\V bash shell的发布级别
\w 当前工作目录
\W 当前工作目录的基本名称
\! 该命令的bash shell历史数
\# 该命令的命令数量
\$ 如果是普通用户, 则为美元符号$;如果超级用户(root 用户), 则为井号#。
\nnn 对应于八进制值 nnn 的字符
\\ 斜杠
\[ 控制码序列的开头
\] 控制码序列的结尾
注意,所有的特殊字符均以反斜杠\开头, 目的是与普通字符区分开来。您可以在命令提示符中使用以上任何特殊字符的组合。
我们可以通过修改 PS1 变量来修改提示符格式, 例如:
[root@localhost ~]# PS1="[\t][\u]\$ "
[09:59:08][root]$
新的 Shell 提示符现在可以显示当前的时间和用户名。不过这个新定义的 PS1 变量只在当前 Shell 会话期间有效, 再次启动 Shell 时将重新使用默认的提示符格式。
第一个Shell脚本
打开文本编辑器, 新建一个文本文件, 并命名为 test.sh。
扩展名sh代表 shell, 扩展名并不影响脚本执行, 见名知意就好, 如果你用 php 写 shell 脚本, 扩展名就用php好了。
在 test.sh 中输入代码:
#!/bin/bash
echo "Hello World !" #这是一条语句
第 1 行的#!是一个约定的标记, 它告诉系统这个脚本需要什么解释器来执行, 即使用哪一种Shell; 后面的/bin/bash就是指明了解释器的具体位置。
第 2 行的 echo 命令用于向标准输出文件(Standard Output,stdout, 一般就是指终端)输出文本。在.sh文件中使用命令与在终端直接输入命令的效果是一样的。
第 2 行的#及其后面的内容是注释。Shell 脚本中所有以#开头的都是注释(当然以#!开头的除外)。
下面给出了一段稍微复杂的 Shell 脚本:
#!/bin/bash
echo "What is your name?"
read PERSON
echo "Hello, $PERSON"
第 5 行中表示从终端读取用户输入的数据, 并赋值给 PERSON 变量。read 命令用来从标准输入文件(Standard Input, stdin, 一般就是指终端)读取用户输入的数据。
第 6 行表示输出变量 PERSON 的内容。注意在变量名前边要加上$, 否则变量名会作为字符串的一部分处理。
执行方式:
[root@localhost ~]# sh test.sh
What is your name?
xutao
Hello, xutao
执行 Shell 脚本通常有两种方法。
$ cd demo #切换到 test.sh 所在的目录
$ chmod +x ./test.sh #使脚本具有执行权限
$ ./test.sh #执行脚本
第 2 行中, chmod +x表示给 test.sh 增加执行权限。
第 3 行中, ./表示当前目录, 整条命令的意思是执行当前目录下的 test.sh 脚本。如果不写./, Linux 会到系统路径(由 PATH 环境变量指定)下查找 test.sh,
而系统路径下显然不存在这个脚本, 所以会执行失败。
2) 使用 source 命令
与点号类似, source 命令也可读取并在当前环境中执行脚本, 同时还可返回脚本中最后一个命令的返回状态, 如果没有返回值则返回 0, 代表执行成功;
如果未找到指定的脚本则返回 false。
$ source test.sh
当命令失败时立即退出?
#!/bin/bash
set -euo pipefail
- 上一篇: 学习Shell 教程(shell编程学习)
- 下一篇: 计算机专业必须掌握的脚本开发语言—shell
猜你喜欢
- 2025-05-02 10款鲜为人知的PHP框架(10款鲜为人知的php框架代码)
- 2025-05-02 3分钟搞懂反弹shell(反弹shell的常用命令)
- 2025-05-02 计算机专业必须掌握的脚本开发语言—shell
- 2025-05-02 学习Shell 教程(shell编程学习)
- 2025-05-02 一个有意思的PHP Webshell,利用伪协议执行代码
- 2025-05-02 Linux入门-shell编程-适合小白(linux shell编程是什么)
- 2024-08-25 命令执行底层原理探究-PHP(一)(命令行执行php)
- 2024-08-25 PHP都能够与那些编程语言一起合作干大事,哈哈,你一定没有想全吧
- 2024-08-25 网站渗透总结之Getshell用法大全(网页渗透工具)
- 2024-08-25 命令执行底层原理探究-PHP(三)(执行命令的代码)
你 发表评论:
欢迎- 最近发表
-
- 10款鲜为人知的PHP框架(10款鲜为人知的php框架代码)
- 3分钟搞懂反弹shell(反弹shell的常用命令)
- 计算机专业必须掌握的脚本开发语言—shell
- shell 基本语法(shell基本语法set)
- 学习Shell 教程(shell编程学习)
- 一个有意思的PHP Webshell,利用伪协议执行代码
- Linux入门-shell编程-适合小白(linux shell编程是什么)
- GrayLog开源日志管理平台技术文章合集【共58篇】
- AI大模型 MiniMax 基于 Apache Doris 的日志系统,PB 级秒级查询响应
- 互联网大厂后端必看!手把手教你替换 Spring Boot 中的日志框架
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)