但愿海波平 发表于 2024-10-24 19:54:39

linux shell 脚本语言教程(超详细!)

Shell 编程详细指南

什么是 Shell?

Shell 是用户与操作系统内核之间的接口,允许用户通过命令行输入来控制操作系统。它充当命令解释器,读取用户输入的命令并执行相应的操作。Shell 提供了强大的脚本编程能力,可以自动化许多任务。常见的 Shell 有 Bash(Bourne Again Shell)、Zsh(Z Shell)、Ksh(Korn Shell)等。
什么是 Shell 脚本?

Shell 脚本是一种编程语言脚本,用于在 Unix/Linux 操作系统上执行命令。它是一系列命令的集合,通常保存在一个文件中,可以通过运行脚本文件来执行这些命令。
1. 注释

单行注释

在 Shell 脚本中,注释是通过 # 字符来实现的。任何在 # 后面的内容都会被忽略,不会被执行。
# 这是一个单行注释
# echo "Hello, World!" 文章下面讲的是shell是Bash的语法, 所有语法可以直接在终端使用, 也可以写在一个 .bash 或 .sh 的文件中, 然后通过 ./filename 来执行。(要想执行, 需要给文件可执行的权限, 下面会讲到)
文件开头先写上下面内容,
#!/bin/bash#!/bin/bash 是一种称为 "shebang" 或 "hashbang" 的特殊注释,用于指定脚本的解释器。
作用


[*]指定解释器:#!/bin/bash 告诉操作系统这个脚本应该由 /bin/bash 程序来解释执行。/bin/bash 是 Bash(Bourne Again Shell)的路径。
[*]执行权限:当你在 Unix/Linux 系统中运行一个脚本时,操作系统会根据这个 shebang 行来决定用哪个解释器来执行脚本内容。#!/bin/bash 使得脚本能够以 Bash 语言执行,即使脚本的扩展名不是 .sh。
2. 变量

变量定义与使用
在 Shell 中,变量的定义不需要使用数据类型。可以直接用 = 号赋值,不要在 = 号两边加空格。变量的值可以通过 $ 符号来引用。
my_var="Hello, World!"
echo $my_var变量命名规则

[*]变量名只能包含字母、数字和下划线。
[*]变量名不能以数字开头。
[*]变量名通常使用大写字母以提高可读性(不是强制要求)。
变量类型

[*]字符串变量
name="John Doe"
echo "Hello, $name"
[*]整数变量
number=42
echo "The number is $number"数组

数组赋值
arr=(value1 value2 value3)读取数组元素
echo ${arr}变量操作

变量替换
变量替换是指将变量的值插入到字符串中。
echo "My name is ${name}."只读变量
定义只读变量后,其值不能被修改。
readonly val="value"
val="new_value" # 这将会报错3. 环境变量

环境变量是可以在整个系统中使用的变量。它们通常在 Shell 会话开始时定义,可以影响系统的行为和操作。常见的环境变量有 PATH、HOME、USER 等。
定义和导出环境变量

使用 export 命令可以将变量设置为环境变量。
export MY_ENV_VAR="value"查看环境变量

使用 printenv 或 env 命令可以查看当前所有环境变量。
printenv
env4. 常用 Shell 变量


[*]$0:当前脚本的文件名。
[*]$1, $2, ...:传递给脚本或函数的参数。
[*]$#:传递给脚本或函数的参数个数。
[*]$@:传递给脚本或函数的所有参数。
[*]$?:上个命令的退出状态。
[*]$$:当前 Shell 进程的 PID。
[*]$!:后台运行的最后一个进程的 PID。
5. 输入输出

read 命令

read 命令用于从标准输入读取一行输入,并将其分配给一个或多个变量。
基本用法

echo "Enter your name:"
read name
echo "Hello, $name!"使用选项


[*]-p 提示符
[*]-s 隐藏输入(常用于密码)
[*]-t 设置超时
[*]-n 限制输入字符数
read -p "Enter your username: " username
read -s -p "Enter your password: " password
echo
echo "Username: $username"echo 命令

echo 命令用于输出字符串到标准输出。
基本用法

echo "Hello, World!"使用选项


[*]-n 不换行
[*]-e 解析反斜杠转义字符
echo -n "Hello, "
echo "World!"
echo -e "Line1\nLine2\nLine3"printf 命令

printf 命令用于格式化输出,类似于 C 语言中的 printf 函数。
printf "Hello, %s!\n" "World"常见格式说明符


[*]%s 字符串
[*]%d 十进制整数
[*]%f 浮点数
[*]%x 十六进制数
name="John"
age=25
printf "Name: %s, Age: %d\n" "$name" "$age"6. 条件判断

判断语句

if 语句

if [ condition ]; then
# statements
elif [ condition ]; then
# statements
else
# statements
fi样例:
#!/bin/bash

number=5

# gt lt 分别是 > 和 <
if [ $number -gt 0 ]; then
echo "The number is positive."
elif [ $number -lt 0 ]; then
echo "The number is negative."
else
echo "The number is zero."
ficase 语句

case "$variable" in
pattern1)
    # statements
    ;;
pattern2)
    # statements
    ;;
*)
    # default statements
    ;;
esac样例:
#!/bin/bash
echo "Enter a single character (a-g):"
read char

case "$char" in
a)
    echo "Monday"
    ;;
b)
    echo "Tuesday"
    ;;
c)
    echo "Wednesday"
    ;;
d)
    echo "Thursday"
    ;;
e)
    echo "Friday"
    ;;
f)
    echo "Saturday"
    ;;
g)
    echo "Sunday"
    ;;
*)
    echo "Invalid input"
    ;;
esactest 命令

test 命令用于条件判断,常与逻辑运算符结合使用。
文件测试


[*]-e 文件存在
[*]-f 文件是普通文件
[*]-d 文件是目录
if test -e /etc/passwd; then
echo "/etc/passwd exists."
fi字符串测试


[*]-z 字符串为空
[*]-n 字符串非空
[*]= 字符串相等
[*]!= 字符串不相等
if test -z "$name"; then
echo "Name is empty."
fi数值测试


[*]-eq 等于
[*]-ne 不等于
[*]-gt 大于
[*]-lt 小于
[*]-ge 大于或等于
[*]-le 小于或等于
if test $age -gt 20; then
echo "Age is greater than 20."
fi7. 循环语句

for 循环

for var in list; do
# statements
donefor i in {1..5}; do
echo "Number: $i"
donewhile 循环

while [ condition ]; do
# statements
donecounter=1
while [ $counter -le 5 ]; do
echo "Counter: $counter"
counter=$((counter + 1))
doneuntil 循环

until [ condition ]; do
# statements
donecounter=1
until [ $counter -gt 5]; do
echo "Counter: $counter"
counter=$((counter + 1))
done8. 函数

Shell 函数用于封装代码块,以便多次调用。
定义函数

function_name() {
# statements
}greet() {
echo "Hello, $1!"
}

greet "World"带返回值的函数

add() {
result=$(( $1 + $2 ))
return $result
}

add 2 3
echo "Sum: $?"综合示例

#!/bin/bash

# 函数定义
print_menu() {
echo "1. Say Hello"
echo "2. Display Date"
echo "3. Exit"
}

# 主程序
while true; do
print_menu
read -p "Enter your choice: " choice
case $choice in
    1)
      read -p "Enter your name: " name
      echo "Hello, $name!"
      ;;
    2)
      current_date=$(date)
      echo "Current date and time: $current_date"
      ;;
    3)
      echo "Goodbye!"
      break
      ;;
    *)
      echo "Invalid choice, please try again."
      ;;
esac
done结论

上述内容涵盖了 Shell 脚本编程中的基础部分,包括输入输出、变量和函数、条件判断和循环等。通过理解和掌握这些内容,你可以编写功能强大的 Shell 脚本来

来源:https://www.cnblogs.com/xxctx/p/18499035
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: linux shell 脚本语言教程(超详细!)