主要记录Shell相关的学习笔记和内容
基础命令
查看shell
- 查看系统中所有的Shell版本:
- 查看系统当前的Shell版本:
切换Shell版本
- 直接输入shell路径切换(具体路径可由上面的
cat /etc/shells查看)
- 退出当前Shell:
exit
查看Bash版本
bash --version
echo $BASH_VERSION
Shell语法
脚本创建和执行
- 创建一个Shell脚本只需一个文本文件,首行通常是
#!加上解释器的路径,例如#!/bin/bash表示此脚本使用Bash解释器。
- 将脚本文件设置为可执行(
chmod +x yourscript.sh),然后通过./yourscript.sh来运行。
变量使用
- 声明:声明变量时不加任何前缀,赋值时等号两边不能有空格。
- 使用:使用变量时,需要在变量名前加
$符号。
条件判断
- 使用
if,else,elif来进行条件判断。
条件可以是命令的返回状态或者表达式的比较结果。
循环
for循环
for循环适用于已知迭代次数的情况,或者从一个列表中逐个处理元素。
- 语法:
- 示例:打印数字1到5
While循环
while循环适用于需要基于条件来重复执行代码块的场合,循环将一直执行,直到条件变为假(false)。
- 语法:
- 示例:不断读取用户的输入,直到输入 "quit" 时退出循环
Until 循环
until循环与while循环相似,但它在条件为假(false)时执行,并持续执行直到条件变为真(true)。
- 语法:
- 示例:从1开始计数,一直计数到5
函数
- 函数可以接受参数并可以返回一个状态码。
- 示例:
数组
- Bash支持一维数组,不支持多维数组。
- 数组元素通过索引访问,索引从0开始。
- 示例:
关联数组
- Bash 4及以上版本支持关联数组,可以使用字符串作为索引。
- 示例:
- 详细使用:
输入输出重定向
文件描述符
- Shell使用文件描述符来管理输入和输出。
- 定义:
0:标准输入1:标准输出2:标准错误
输出重定向
- 输出重定向可以将命令的输出发送到一个地方,而不是显示在终端上。
- 语法:
>:将输出重定向到一个文件,如果文件已存在,则覆盖文件。>>:将输出追加到一个文件的末尾,而不是覆盖它。
- 示例:
输入重定向
- 输入重定向可以从文件而不是键盘读取输入。
- 语法:
<:将文件的内容作为命令的输入。
- 示例:
错误重定向
- 错误重定向可以控制命令的错误输出。
- 语法:
2>:将错误信息重定向到一个文件,覆盖文件。2>>:将错误信息追加到一个文件。
- 示例:
合并输出和错误重定向
- 将标准输出和错误输出合并,并重定向到同一个文件。
- 语法:
&>:将标准输出和标准错误合并后重定向到一个文件,覆盖文件。&>>:将标准输出和标准错误合并后重定向到一个文件,追加内容。
- 示例:
临时重定向
- 为命令的执行过程中临时重定向输出或输入。
- 示例:
Shell语法简单应用
任务描述
- 使用Shell脚本制作一个简单的猜数字游戏。
- 使用到许多知识点,如变量、条件判断、循环、函数以及基本的用户输入处理。
游戏描述
- 游戏的目标是让用户猜测一个1到100之间的随机数。
- 程序将反馈用户的猜测是太高、太低还是正确。
- 如果猜对了,游戏结束并显示猜测次数;
- 如果猜错了,用户可以继续猜,直到猜对为止。
Shell实现
如何使用这个脚本
- 将上述代码保存到一个文件中,例如
guessing_game.sh。
- 通过运行命令
chmod +x guessing_game.sh使脚本文件变成可执行文件。
- 在Shell中运行脚本
./guessing_game.sh开始游戏。
代码解析
- 生成随机数:
$RANDOM生成一个随机数,然后使用模运算 (% 100) 使其在1到100之间。
- 函数定义:定义了一个
greet函数来显示初始的游戏指示。
- 主循环:使用
while true创建无限循环,直到用户正确猜测数字。
- 读取用户输入:
read -p用于获取用户输入,并提示用户。
- 输入验证:使用正则表达式检查输入是否为数字。
- 条件判断:使用
if和elif结构来判断用户猜测的数字与目标数字的关系,并给出相应的提示。
常用脚本
参考
参考/资料
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/01HW3C2GF02PPT7B3A38DMM2SP
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts
