首页 > 系统相关 >linux shell 脚本语言教程(超详细!)

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

时间:2024-10-24 10:24:12浏览次数:5  
标签:脚本 Shell 脚本语言 echo shell linux Hello 变量 name

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" 的特殊注释,用于指定脚本的解释器。

作用

  1. 指定解释器#!/bin/bash 告诉操作系统这个脚本应该由 /bin/bash 程序来解释执行。/bin/bash 是 Bash(Bourne Again Shell)的路径。

  2. 执行权限:当你在 Unix/Linux 系统中运行一个脚本时,操作系统会根据这个 shebang 行来决定用哪个解释器来执行脚本内容。#!/bin/bash 使得脚本能够以 Bash 语言执行,即使脚本的扩展名不是 .sh

2. 变量

变量定义与使用

在 Shell 中,变量的定义不需要使用数据类型。可以直接用 = 号赋值,不要在 = 号两边加空格。变量的值可以通过 $ 符号来引用。

my_var="Hello, World!"
echo $my_var

变量命名规则

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

变量类型

  1. 字符串变量
name="John Doe"
echo "Hello, $name"
  1. 整数变量
number=42
echo "The number is $number"

数组

数组赋值

arr=(value1 value2 value3)

读取数组元素

echo ${arr[1]}

变量操作

变量替换

变量替换是指将变量的值插入到字符串中。

echo "My name is ${name}."

只读变量

定义只读变量后,其值不能被修改。

readonly val="value"
val="new_value" # 这将会报错

3. 环境变量

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

定义和导出环境变量

使用 export 命令可以将变量设置为环境变量。

export MY_ENV_VAR="value"

查看环境变量

使用 printenvenv 命令可以查看当前所有环境变量。

printenv
env

4. 常用 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."
fi
case 语句
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"
    ;;
esac

test 命令

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."
fi

7. 循环语句

for 循环

for var in list; do
  # statements
done
for i in {1..5}; do
  echo "Number: $i"
done

while 循环

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

until 循环

until [ condition ]; do
  # statements
done
counter=1
until [ $counter -gt 5]; do
  echo "Counter: $counter"
  counter=$((counter + 1))
done

8. 函数

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 脚本来

标签:脚本,Shell,脚本语言,echo,shell,linux,Hello,变量,name
From: https://www.cnblogs.com/xxctx/p/18499035

相关文章

  • Windows、macOS和Linux系统安装Python的指南
    在不同的操作系统上安装Python通常涉及几个简单的步骤。以下是在Windows、macOS和Linux系统上安装Python的指南:Windows系统安装Python:下载Python安装程序:访问Python官方网站 python.org。选择适合Windows的Python版本(确保下载最新稳定版)。运行安装程序:双击下载的.exe文......
  • [linux]常用指令
    命令初体验体验Linux命令的使用执行命令时,如果提示信息出现乱码,是由于编码问题导致的,执行命令修改Linux的编码即可命令1:把配置写入指定文件命令2:重新加载指定文件Linux命令格式:command[-options][parameter]command:命令名[-options]:选项,可同来......
  • [linux]快速入门
    学习目标通过学习能够掌握以下的linux操作操作系统按照应用领域的不同,操作系统可以分为几类桌面操作系统服务器操作系统移动设备操作系统嵌入式操作系统不同领域的主流操作系统桌面操作系统Windows(用户数量最多)MacOS(操作体验好,办公人士首选)Linux(用户数量少)......
  • Linux系统性能优化实战指南
    引言Linux,作为开源操作系统的代表,凭借其高效、稳定、灵活的特性,在服务器、嵌入式设备、云计算等多个领域占据主导地位。然而,随着业务的发展和系统负载的增加,Linux系统的性能优化成为运维和开发人员必须面对的重要课题。本文将从硬件资源优化、内核参数调整、文件系统优化、......
  • linux提交之6e90b6-开源之耻!
    本周合并到Linux6.12-rc4内核中的一个补丁删除了一些内核维护者,使其不再出现在官方MAINTAINERS文件中,该文件可识别所有驱动程序和子系统维护者。其中包括宏碁Aspire1EC驱动程序、CirrusLogicCLPS711XARM架构、Baikal-T1PVT硬件监控器驱动程序、LibataPATA驱动程......
  • 宝塔linux面板安装(宝塔面板linux如何搭建网站)
    宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。有30个人的专业团队研发及维护,经过200多个版本的迭代,功能全,少出错且足够安全,已获得全球百万用户认可安装。 Linux面板(Centos/OpenCloud/Alibaba稳定......
  • centos(linux): systemctl列出所有运行中/自启动的服务
    一,列出所有服务:systemctllist-units--type=service二,列出所有运行中的服务1,用--state指定状态systemctllist-units--type=service--state=running2,直接grepsystemctllist-units--type=service|greprunning三,列出所有自启动的服务1,列出所有自启动的单元......
  • linux硬盘清理
    日志文件清理#!/bin/bash#定义需要检查的目录directories=("/home/logs/archived"\"/home/logs/archived"\"/data/logs"\"/data/logs")#获取当前硬盘分区的使用情况df_output=$(df--output=pcent/dat......
  • Linux 的系统信息命令
    Author:ACatSmilingSince:2024-10-22操作系统信息:方式一:uname-a。uname是"UnixName"的缩写,这个命令主要用于打印与系统相关的信息,-a是uname命令的一个选项,这个选项的作用是让uname打印出所有的系统信息,如果不使用-a选项,uname只会打印部分信息。输出结果......
  • Kali Linux
    KaliLinux的安装与基本使用一、梗概Kali基于Debian,内置诸多渗透测试工具二、下载与安装kali官网地址:https://www.kali.org/get-kali/#kali-platforms①物理机安装②虚拟机安装启动虚拟机,选择对应镜像,输入用户名kali密码kali即可进入默认桌面三、修改root权限输入命令:s......