shell

一、第一个shell程序

powershell 复制代码
#!/bin/bash
#使用/bing/bash来解析脚本
echo "helloworld" #输出语句

注意:

写完shell脚本后,要给该脚本加上可执行权限(chmod +x file),才可有运行

二、变量和命令行参数

powershell 复制代码
#!/bin/bash

num=10 #不能有多与的空格
name="jack"
age=22
sex="male"

echo $num
echo "name: $name   age: $age   sex: $sex"

echo "输出命令行参数"
echo $1
echo $2
echo $3

echo "共有$#个命令行参数"
echo "所有参数:$*"
~                      

运行结果:

三、环境级变量、拥护级变量、系统级变量

1.环境级变量

定义 :环境级变量是在用户的操作环境中全局可用的变量,它们对于系统中的所有用户和进程都是可见的,除非被局部覆盖。
用法 :用于配置系统环境,如定义用户的主目录(HOME)、设置命令搜索路径(PATH)、指定默认编辑器(EDITOR)等。
设置方法: 在Shell会话中使用export VARIABLE_NAME=value命令或在用户级配置文件(如.bashrc)中设置,以便在每次登录时自动设置。
作用域: 当前终端

2.用户级变量

定义 :用户级变量是指仅对单个用户的Shell会话或脚本生效的变量。它们通常在用户的个人配置文件中定义,如.bash_profile、.bashrc或.profile。
用法 :用于定义用户特定的环境配置,如用户特定的路径添加、别名设置等。
设置方法 :在用户的个人配置文件中添加变量定义(例如,在.bashrc中添加VARIABLE_NAME=value),并通过source ~/.bashrc或重新登录来应用更改。
作用域: 相同用户

3.系统级变量

定义 :系统级变量是对系统上的所有用户和进程全局有效的变量。这些变量在系统级别的配置文件中设置,如/etc/environment、/etc/profile或/etc/bash.bashrc。
用法 :用于设置系统范围内的环境配置,如系统级别的路径设置或全局别名。
设置方法 :需要管理员权限来编辑系统级配置文件,并在文件中添加export VARIABLE_NAME=value。更改通常需要重新启动系统或新的登录会话才能生效。
作用域: 整个系统

4.代码实例

powershell 复制代码
export AA=100   #环境级变量 作用域:当前终端

echo "export AA=100" >> ~/.profile    #用户级变量 作用域:相同用户
#source ~/.profile

echo "export AA=100"  >> /etc/profile   #系统级变量 作用域:整个系统
#source /etc/profile

echo "打印环境变量"
echo $AA

四、运算

powershell 复制代码
#!/bin/bash

num=100
let num=num+100
echo $num

num=100
num=$[num+100]
echo $num

num=100
num=$((num+100))
echo $num

num=100
num=`expr $num + 100`
echo $num

五、数组

1.普通数组

使用示例:

powershell 复制代码
# 定义一个数组
fruits=("apple" "banana" "orange" "grape")

# 访问数组元素
echo ${fruits[0]}  # 输出第一个元素: apple
echo ${fruits[2]}  # 输出第三个元素: orange

# 修改数组元素
fruits[1]="mango"  # 将第二个元素修改为 mango

# 遍历数组元素
for fruit in "${fruits[@]}"
do
  echo $fruit
done

# 获取数组长度
echo ${#fruits[@]}  # 输出数组长度: 4

# 添加元素到数组末尾
fruits+=("kiwi")

# 删除数组元素
unset fruits[2]  # 删除第三个元素

# 清空数组
fruits=()

# 检查数组是否为空
if [ ${#fruits[@]} -eq 0 ]; then
  echo "数组为空"
fi

2.关联数组

在Shell脚本中,关联数组(Associative Arrays)是一种特殊类型的数组,其中每个元素都有一个关联的键(Key)和一个对应的值(Value)。与普通数组不同,关联数组的索引可以是任意字符串,而不仅限于数字。
使用示例:

powershell 复制代码
# 定义一个关联数组
declare -A fruits
fruits["apple"]="red"
fruits["banana"]="yellow"
fruits["orange"]="orange"
fruits["grape"]="purple"

# 访问数组元素
echo ${fruits["apple"]}  # 输出 "red"
echo ${fruits["banana"]}  # 输出 "yellow"

# 修改数组元素
fruits["banana"]="green"  # 将 "banana" 的值修改为 "green"

# 遍历数组元素
for key in "${!fruits[@]}"
do
  echo "Key: $key, Value: ${fruits[$key]}"
done

# 获取数组长度
echo ${#fruits[@]}  # 输出数组长度: 4

# 删除数组元素
unset fruits["orange"]  # 删除 "orange" 元素

# 清空数组
fruits=()

# 检查数组是否为空
if [ ${#fruits[@]} -eq 0 ]; then
  echo "数组为空"
fi

3.代码实例

powershell 复制代码
#!/bin/bash

arr1=(1 2 3 4 5)
arr2=('a' 'b' 'c' 'd' 'e')
arr3=("1111" "2222" "3333")

echo ${arr1[0]}
echo ${arr2[0]}
echo ${arr3[0]}

echo ${arr3[@]} #访问所有元素
echo ${#arr1[@]} #打印数组元素个数
echo ${!arr1[@]} #打印所有的下标
echo ${arr1[@]:1} #从第二个元素开始打印
echo ${arr1[@]:1:2} 

#关联数组
declare -A arr4
declare -A arr5
arr4[name]="jack"
arr4[age]=22
arr4[sex]="male"

arr5=([name]="tom" [age]=24 [sex]="male")

echo ${arr4[@]}
echo ${arr5[@]}

六、判断

1.if

powershell 复制代码
if [ condition ]; then
    # 执行条件为真时的代码
elif [ condition ]; then
    # 执行其他条件为真时的代码
else
    # 执行条件都不满足时的代码
fi

在if语句中,可以使用各种条件表达式来进行判断,如比较运算符(-eq, -ne, -lt, -gt, -le, -ge)、逻辑运算符(-a, -o, !)、字符串比较(=, !=, -z, -n)等。

比较运算符:

  • -eq:等于,用于比较两个值是否相等。例如:[ a -eq b \] ,如果变量 b \],如果变量 b\],如果变量a的值等于变量b的值,则条件为真。

  • -ne:不等于,用于比较两个值是否不相等。例如:[ a -ne b \] ,如果变量 b \],如果变量 b\],如果变量a的值不等于变量b的值,则条件为真。

  • -lt:小于,用于比较一个值是否小于另一个值。例如:[ a -lt b \] ,如果变量 b \],如果变量 b\],如果变量a的值小于变量b的值,则条件为真。

  • -gt:大于,用于比较一个值是否大于另一个值。例如:[ a -gt b \] ,如果变量 b \],如果变量 b\],如果变量a的值大于变量b的值,则条件为真。

  • -le:小于等于,用于比较一个值是否小于等于另一个值。例如:[ a -le b \] ,如果变量 b \],如果变量 b\],如果变量a的值小于等于变量b的值,则条件为真。

  • -ge:大于等于,用于比较一个值是否大于等于另一个值。例如:[ a -ge b \] ,如果变量 b \],如果变量 b\],如果变量a的值大于等于变量b的值,则条件为真。

  • =:等于,用于比较两个字符串是否相等。例如:[ str1 = s t r 2 \] ,如果变量 str2 \],如果变量 str2\],如果变量str1的值等于变量str2的值,则条件为真。

  • !=:不等于,用于比较两个字符串是否不相等。例如:[ str1 != s t r 2 \] ,如果变量 str2 \],如果变量 str2\],如果变量str1的值不等于变量str2的值,则条件为真。

  • -z:空字符串,用于判断字符串是否为空。例如:[ -z s t r ] ,如果变量 str ],如果变量 str],如果变量str的值为空,则条件为真。

  • -n:非空字符串,用于判断字符串是否非空。例如:[ -n s t r ] ,如果变量 str ],如果变量 str],如果变量str的值非空,则条件为真。

代码示例:

powershell 复制代码
#!/bin/bash

num=$1 #获取第一个参数
if [ -z $num ]; then
    echo "请输入参数"
    exit
fi


if [ $num -eq 100 ]; then
    echo "等于100"
elif [ $num -gt 100 ]; then
    echo "大于100"
elif [ $num -lt 100 ]; then
    echo "小于100"
fi

2.case

powershell 复制代码
case $variable in
    pattern1)
        # 匹配pattern1时执行的代码
        ;;
    pattern2)
        # 匹配pattern2时执行的代码
        ;;
    *)
        # 未匹配任何模式时执行的代码
        ;;
esac

case语句用于根据变量的值进行多模式匹配,每个模式可以使用通配符来匹配字符串。

代码示例:

powershell 复制代码
#!/bin/bash

read num 
case $num in
    [a-z])
        echo "小写字母";;
    [A-Z])
        echo "大写字母";;
    [0-9])
        echo "数字";;
    *)  
        echo "未知";;
esac

七、循环

1.while

powershell 复制代码
while condition
do
    # 代码块
done

代码示例:

powershell 复制代码
#!/bin/bash

while read i
do
    echo $i
done < $1

< 1 表示将文件的内容作为输入重定向到循环中。1 是脚本的第一个命令行参数,表示要读取的文件名。

因此,这段脚本会逐行读取指定文件的内容,并将每行内容输出到标准输出。可以通过命令行参数指定要读取的文件名,例如:

powershell 复制代码
./4.while.sh input.txt

2.for

powershell 复制代码
for variable in item1 item2 item3 ...
do
    # 代码块
done
  • variable 是一个变量名,用于存储列表中的每个元素。
  • item1 item2 item3 ... 是要遍历的列表,可以是空格分隔的多个元素。
相关推荐
不会敲代码的XW25 分钟前
LVS(Linux Virtual Server)详细笔记(理论篇)
linux·笔记·lvs
路飞雪吖~42 分钟前
【Linux】线程创建&&等待&&终止&&分离
linux·开发语言
♛暮辞1 小时前
centos 安装java 环境
java·linux·centos
不脱发的程序猿1 小时前
嵌入式Linux:进程间通信机制
linux
喧星Aries2 小时前
进程的内存映像,只读区,可读写区,堆,共享库,栈详解
linux·操作系统·计算机组成原理
vortex52 小时前
dockerfile 最佳实践
linux·docker·云技术
神一样的老师3 小时前
Linux下编译海思WS63 SDK全攻略
linux·运维·服务器
2301_803554523 小时前
网络协议和基础通信原理
linux·c++
万能小锦鲤3 小时前
《大数据技术原理与应用》实验报告一 熟悉常用的Linux操作和Hadoop操作
大数据·linux·hadoop·ubuntu·vmware·实验报告·大数据技术原理与应用
骑驴看星星a4 小时前
WebAPIs基本认知,DOM基础介绍
java·linux·javascript·人工智能·redis·深度学习·机器学习