SHELL笔记(概念+变量)
shell 概念
Shell 是一个命令行解释器,它充当用户与操作系统内核之间的桥梁。用户在 Shell 环境下输入各种命令,Shell 负责接收并分析这些命令,然后将其转换为内核能够理解和执行的系统调用。通过这种方式,用户可以便捷地操作计算机系统,完成诸如文件和目录操作、进程管理、系统配置、网络管理等一系列复杂的任务。
常见的 Shell 类型众多,其中 Bourne Shell(sh)是早期 UNIX 系统广泛使用的一种 Shell;C Shell(csh)在语法上与 C 语言有相似之处,具有独特的交互特性;Korn Shell(ksh)综合了其他 Shell 的优点;而 Bash(Bourne Again Shell)是目前大多数 Linux 系统默认的 Shell,它继承了 Bourne Shell 的语法,同时融合了其他 Shell 的优秀特性,功能强大且应用广泛。
shell 编写规范
-
首行声明
Shell 脚本的首行用于指定脚本的解释器。对于 Bash 脚本,通常使用#!/bin/bash
。这一行至关重要,它告诉操作系统使用何种解释器来执行后续的脚本内容。如果是其他类型的 Shell 脚本,如使用 Python 作为解释器的脚本,首行可能是#!/usr/bin/python
(具体路径根据系统实际安装情况而定)。 -
注释
注释是提高脚本可读性的关键因素。在 Shell 脚本中,使用#
来添加注释。注释可以出现在脚本的任何位置,用于解释脚本的功能、某一行或某一块代码的作用、变量的含义等。例如:
# This is a simple shell script to print "Hello, World!"
echo "Hello, World!"
多行注释可以使用以下方式:
:<<'xxxx'
comment1
comment2
comment3
……
xxxx
-
命名规范
- 变量命名:变量名应具有清晰的含义,便于理解代码。一般采用小写字母和下划线组合的方式,例如
user_name
、file_path
等。避免使用无意义或容易混淆的名称。 - 函数命名:函数名同样需要遵循清晰易懂的原则,能够准确反映函数的功能。例如
print_usage
、calculate_sum
等。
- 变量命名:变量名应具有清晰的含义,便于理解代码。一般采用小写字母和下划线组合的方式,例如
-
代码缩进
虽然 Shell 脚本对缩进没有严格的语法要求,但为了提高代码的可读性,建议使用统一的缩进风格。通常可以使用四个空格或者一个制表符进行缩进,特别是在代码块结构(如if - else
语句、for
循环、while
循环、函数定义等)中。例如:
if [ $condition ]; then
action1
action2
else
action3
fi
- 语句分隔
在 Shell 中,每条语句默认以换行符作为结束标志。不过,也可以在同一行中编写多条语句,此时需要使用分号;
来分隔不同的语句。但为了保持代码的清晰性,尽量避免在一行中编写过多复杂的语句。例如:
command1; command2; command3
shell 变量
- 变量定义
在 Shell 中,定义变量无需事先声明类型。变量的定义形式为变量名 = 值,注意等号两边不能有空格(除非值本身包含空格,此时需要用引号将值括起来)。例如:
var1=10
var2="hello world"
var3=$var1$var2
这里var1
被赋值为数字 10,var2
被赋值为字符串 “hello world”,var3
则是将var1
和var2
的值连接起来。
- 变量引用
要使用变量的值,在变量名前加$
符号。例如,如果定义了name="Alice"
,那么echo $name
会输出 “Alice”。当变量名与其他字符连接时,为了避免歧义,可以使用${变量名}
的形式。例如:
prefix="pre"
suffix="fix"
echo "${prefix}_${suffix}"
这会出 “pre_fix”。
- 环境变量
环境变量是一种特殊的变量,它在整个系统环境中都有效,可以被系统中所有的进程访问。可以使用export
命令来创建或修改环境变量。例如,要将一个新的目录添加到PATH
环境变量中(PATH
用于指定系统查找可执行文件的路径),可以使用以下命令:
export PATH=$PATH:/new/directory
一些常见的环境变量包括:
PATH
:决定了 Shell 在哪些目录中搜索用户输入的命令对应的可执行文件。HOME
:当前用户的主目录。USER
:当前用户名。SHELL
:当前使用的 Shell 的路径。
- 局部变量和全局变量
- 局部变量:在函数内部定义的变量通常是局部变量,其作用域仅限于该函数内部。例如:
function my_function() {
local local_var="local value"
echo $local_var
}
my_function
echo $local_var # 这里会报错,因为local_var在函数外部不可见
- 全局变量:在函数外部定义的变量一般是全局变量,可以在整个脚本中访问(包括函数内部)。但是,如果在函数内部对全局变量重新赋值,需要使用
global
关键字(在某些 Shell 中)或者通过export
命令(在 Bash 中)来声明其为全局变量。例如:
global_var="global value"
function modify_global_var() {
global_var="new global value"
echo $global_var
}
modify_global_var
echo $global_var
- 特殊变量
Shell 中有一些特殊变量,它们具有特定的含义和用途:$0
:代表脚本的名称。$1
、$2
、...
、$n
:分别代表传递给脚本的第 1 个、第 2 个、...、第 n 个参数。例如,如果脚本test.sh
的内容为echo $1
,执行./test.sh argument1
会输出 “argument1”。$#
:表示传递给脚本的参数个数。$@
:代表所有参数的列表(以空格分隔),常用于遍历所有参数。$*
:也是所有参数的列表,但将所有参数视为一个整体。$$
:当前脚本的进程 ID。$?
:上一个命令的退出状态,0 表示命令执行成功,非 0 表示命令执行失败。例如:
ls non_existent_file
echo $? # 这里会输出非0的值,因为ls命令查找不存在的文件会失败
-
shell 环境变量存储的文件:
-
bash shell 初始化文件有:/etc/profile、 ~/.bash_profile、 ~/.bash_login、 ~/.profile、 ~/.bashrc、/etc/bashrc
-
如图:
-
/etc/profile :存放一些全局(共有)变量,不管哪个用户,登录时都会读取该文件。通常设置一些Shell变量PATH,USER,HOSTNAME和HISTSIZE等
-
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次,默认情况下,此文件通过脚本执行同目录下用户的.bashrc文件
-
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取
-
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取
-
/etc/inputrc文件为特定的情况处理键盘映射
-
执行顺序:/etc/profile-->/etc/profile.d/*.sh--> ~/.bash_profile -->/etc/bashrc-->~./.bashrc
-
结论:
-
对于用户的环境变量设置,常见的是用户家目录下的.bashrc和.bash_profile
-
对于全局环境变量设置,常见的文件有:/etc/profile /etc/bashrc /etc/profile.d 这三个配置文件,常用方法是直接在/etc/profile文件中写入全局变量,如果想要在登陆后初始化或者显示加载的内容,只需要把脚本文件放在 /etc/profile.d 文件下即可
-
-
原文地址:https://blog.csdn.net/2301_78537542/article/details/143834541
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!