“Shell”的版本间的差异

来自小能手俱乐部
跳到导航 跳到搜索
第79行: 第79行:


=== 变量 ===
=== 变量 ===
跟许多程序设计语言一样,你可以在 bash 中创建变量。
bash 中没有数据类型,bash 中的变量可以保存一个数字、一个字符、一个字符串等等。同时无需提前声明变量,给变量赋值会直接创建变量。


==== 变量命名原则 ====
==== 变量命名原则 ====
* 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
* 中间不能有空格,可以使用下划线(_)。
* 不能使用标点符号。
* 不能使用 bash 里的关键字(可用 help 命令查看保留关键字)。


==== 声明变量 ====
==== 声明变量 ====
访问变量的语法形式为:<code>${var}</code> 和 <code>$var</code> 。
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,所以推荐加花括号。<syntaxhighlight lang="shell">
word="hello"
echo ${word}
# Output: hello
</syntaxhighlight>


==== 只读变量 ====
==== 只读变量 ====
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。<syntaxhighlight lang="shell">
rword="hello"
echo ${rword}
readonly rword
# rword="bye"  # 如果放开注释,执行时会报错
</syntaxhighlight>


==== 删除变量 ====
==== 删除变量 ====
使用 unset 命令可以删除变量。变量被删除后不能再次使用。unset 命令不能删除只读变量。<syntaxhighlight lang="shell">
dword="hello"  # 声明变量
echo ${dword}  # 输出变量值
# Output: hello
unset dword    # 删除变量
echo ${dword}
# Output: (空)
</syntaxhighlight>


==== 变量类型 ====
==== 变量类型 ====
* '''局部变量''' :局部变量是仅在某个脚本内部有效的变量。它们不能被其他的程序和脚本访问。
* '''环境变量''' :环境变量是对当前 shell 会话内所有的程序或脚本都可见的变量。创建它们跟创建局部变量类似,但使用的是 <code>export</code> 关键字,shell 脚本也可以定义环境变量。
常见的环境变量:
{| class="wikitable"
!变量
!描述
|-
|<code>$HOME</code>
|当前用户的用户目录
|-
|<code>$PATH</code>
|用分号分隔的目录列表,shell 会到这些目录中查找命令
|-
|<code>$PWD</code>
|当前工作目录
|-
|<code>$RANDOM</code>
|0 到 32767 之间的整数
|-
|<code>$UID</code>
|数值类型,当前用户的用户 ID
|-
|<code>$PS1</code>
|主要系统输入提示符
|-
|<code>$PS2</code>
|次要系统输入提示符
|}


=== 字符串 ===
=== 字符串 ===

2021年10月10日 (日) 08:22的版本

简介

什么是 shell

  • Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。
  • Shell 既是一种命令语言,又是一种程序设计语言。
  • Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问 Linux 内核的服务。

什么是 shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序,一般文件后缀为 .sh

shell 环境

模式

交互模式
非交互模式

基本语法

解释器

注释

echo

echo 用于字符串的输出。

  • 输出普通字符串:
    echo "hello, world"
    # Output: hello, world
    
  • 输出含变量的字符串:
    name=xiaoming
    echo "hello, \"${name}\""
    # Output: hello, "xiaoming"
    
  • 输出含换行符的字符串:
    # 输出含换行符的字符串
    echo "YES\nNO"
    #  Output: YES\nNO
    
    echo -e "YES\nNO" # -e 开启转义
    #  Output:
    #  YES
    #  NO
    
  • 输出含不换行符的字符串:
    echo "YES"
    echo "NO"
    #  Output:
    #  YES
    #  NO
    
    echo -e "YES\c" # -e 开启转义 \c 不换行
    echo "NO"
    #  Output:
    #  YESNO
    
  • 输出重定向至文件:
    echo "test" > test.txt
    
  • 输出执行结果:
    echo `pwd`
    #  Output:(当前目录路径)
    

printf

printf 用于格式化输出字符串。

printf 命令的语法:

printf  format-string  [arguments...]

参数说明:

  • format-string: 为格式控制字符串
  • arguments: 为参数列表。

默认,printf 不会像 echo 一样自动添加换行符,如果需要换行可以手动添加 \n

变量

跟许多程序设计语言一样,你可以在 bash 中创建变量。

bash 中没有数据类型,bash 中的变量可以保存一个数字、一个字符、一个字符串等等。同时无需提前声明变量,给变量赋值会直接创建变量。

变量命名原则

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用 bash 里的关键字(可用 help 命令查看保留关键字)。

声明变量

访问变量的语法形式为:${var}$var

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,所以推荐加花括号。

word="hello"
echo ${word}
# Output: hello

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

rword="hello"
echo ${rword}
readonly rword
# rword="bye"  # 如果放开注释,执行时会报错

删除变量

使用 unset 命令可以删除变量。变量被删除后不能再次使用。unset 命令不能删除只读变量。

dword="hello"  # 声明变量
echo ${dword}  # 输出变量值
# Output: hello

unset dword    # 删除变量
echo ${dword}
# Output: (空)

变量类型

  • 局部变量 :局部变量是仅在某个脚本内部有效的变量。它们不能被其他的程序和脚本访问。
  • 环境变量 :环境变量是对当前 shell 会话内所有的程序或脚本都可见的变量。创建它们跟创建局部变量类似,但使用的是 export 关键字,shell 脚本也可以定义环境变量。

常见的环境变量:

变量 描述
$HOME 当前用户的用户目录
$PATH 用分号分隔的目录列表,shell 会到这些目录中查找命令
$PWD 当前工作目录
$RANDOM 0 到 32767 之间的整数
$UID 数值类型,当前用户的用户 ID
$PS1 主要系统输入提示符
$PS2 次要系统输入提示符

字符串

单引号和双引号

拼接字符串

获取字符串长度

截取子字符串

查找子字符串

数组

创建数组

访问数组元素

访问数组长度

向数组中添加元素

从数组中删除元素

运算符

算术运算符

关系运算符

布尔运算符

逻辑运算符

字符串运算符

文件测试运算符

控制语句

条件语句

if

if else

if elif else

case

循环语句

for循环

while循环

until循环

select循环

break和continue

函数

位置参数

函数处理参数