一文玩转Linux Shell:用脚本自动化你的工作

本文围绕Linux shell脚本展开,介绍了其基本语法,包括打印、字符串操作、数组使用、运算符、流程控制等内容,还讲解了sed命令在MAC与Linux系统中的不同使用方式,为配置jenkins打包环境等场景提供了相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你是否厌倦了在终端里重复输入相同的命令?是否希望让计算机自动完成繁琐的任务?Shell脚本就是你的终极解决方案!无论是批量重命名文件、定时备份数据,还是监控服务器状态,Shell脚本都能帮你一键自动化,大幅提升效率。本文将带你从基础语法到实战案例,彻底掌握Shell脚本编程,让你的Linux操作飞起来!

一、什么是Shell脚本

Shell脚本是一个包含一系列Linux命令的文本文件,扩展名通常为.sh,可以直接在终端运行。

举例如下:

#!/bin/bash
echo "Hello World!"  # 打印Hello World

以上代码保存为hello.sh,运行:

chmod +x hello.sh  # 添加执行权限
./hello.sh         # 

二、Shell语法

本人学习shell的原因是,公司需要配置jenkins打包环境,用到linux的shell脚本,了解一下其基本的语法。

2.1 打印 echo

#!/bin/bash
echo "Hello World !"

2.2 字符串

  • 定义字符串
  • 只读变量readonly
  • 删除字符串变量
  • 使用字符串变量
  • 字符串拼接
  • 字符串长度
  • 提取子字符串
  • 查找子字符串
2.2.1 定义字符串
your_name="runoob.com"
2.2.2 只读变量
#!/bin/bash
myUrl="http://www.google.com"
readonly myUrl
# myUrl 为只读变量 这里赋值是错误的
myUrl="http://www.runoob.com"
2.2.3 删除字符串变量
unset variable_name
2.2.4 使用字符串变量
your_name="qinjx"
echo $your_name
echo ${your_name}

# 养成使用 ${your_name} 括号的良好习惯
2.2.5 字符串拼接
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1

# 输出结果
hello, runoob ! hello, runoob !
2.2.6 字符串长度
string="abcd"
echo ${#string} 

#输出 4
2.2.7 提取子字符串
string="runoob is a great site"
echo ${string:1:4} 

# 输出 unoo
2.2.8 查找子字符串
# 查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)
string="runoob is a great site"
echo `expr index "$string" io`  

# 输出 4

注意: 以上脚本中 ` 是反引号,而不是单引号 ’

2.3 数组

  • 定义数组
  • 读取数组
  • 获取数组的长度
2.3.1 定义数组
# 定义数组
array_name=(value0 value1 value2 value3)
# 定义数组
array_name=(
value0
value1
value2
value3
)
# 定义数组
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
2.3.2 读取数组
# 读取数组
valuen=${array_name[0]}
# 读取数组的所有元素
echo ${array_name[@]}
2.3.3 获取数组的长度
# 取得数组单个元素的长度
lengthn=${#array_name[0]}
# 取得数组元素的个数
length=${#array_name[@]}
# 取得数组元素的个数
length=${#array_name[*]}

2.4 运算符

  • 加减乘除
  • 相等-eq 不相等-ne
  • 大于-gt 小于-lt 大于等于-ge 小于等于-le
  • 与或非
2.4.1 加减乘除
a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi
2.4.2 相等-eq 不相等-ne
a=10
b=20

# -eq 是否相等
if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi

# -ne 是否不相等
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi

2.4.3 大于-gt 小于-lt 大于等于-ge 小于等于-le
a=10
b=20

# 大于
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi

# 小于
if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi

# 大于等于-ge
if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi

# 小于等于-le
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi
2.4.4 与或非
a=10
b=20

# -a 与运算
if [ $a -lt 100 -a $b -gt 15 ]
then
   echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
   echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi

# 或运算
if [ $a -lt 100 -o $b -gt 100 ]
then
   echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
   echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi

# 非
if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a == $b: a 等于 b"
fi
2.4.5 AND OR
a=10
b=20

if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

if [[ $a -lt 100 || $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

2.5 流程控制

2.5.1 if else

### if else

if condition
then
    command1
else
    command2
fi
### if  else-if else

if condition1
then
    command1
elif condition2 
then 
    command2
else
    command3
fi
### 举例

a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

2.5.2 for 循环

for loop in 1 2 3
do
    echo "The value is: $loop"
done

#结果
The value is: 1
The value is: 2
The value is: 3
for str in 'This is a string'
do
    echo $str
done

#结果
This is a string

2.6 sed命令在MAC与Linux 使用方式

2.7 Linux使用

#直接将file文件里的printa替换为printb
sed -i 's/printa/printb/' test.txt

2.8 Mac使用

#mac的使用方式sed -ixxx 's/被替换文本/替换文本/' test.txt
sed -i.bak 's/printa/printb/' test.txt

三、参考

https://www.runoob.com/linux/linux-shell.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bjxiaxueliang

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值