Shell脚本编程总结及速查手册
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:28
Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算符/if语句/循环控制/… 但在开始之前, 我想先理清Shell语言与Shell之间的关系.
Shell与Shell语言
cat /etc/shells
第一个Shell脚本
#! /bin/sh echo "hello shell!"
依国际惯例这里以在终端里打印一句hello shell!开始, 第一行的#!是一个约定标记, 它告诉脚本这段脚本需要什么解释器来执行. 第二行的echo命令则负责向屏幕上输出一句话.
如何运行
运行shell程序有3种方法:
bash hi.sh
通常情况下, 最方便的方式就是方式1, 通过方式1执行你需要在脚本第一行写好这段脚本由哪个解释器来解释, 而通过方式2来执行则没有这个限制, 写了也没用.
除此之外方式1与方式2执行命令就没有区别了, 但方式3执行的方式与前两种都不同:
使用source执行shell脚本时, 不会创建子进程, 而是在父进程中直接执行!
这里不作更多解释, 感兴趣的同学可以去参考Linux Shell编程从入门到精通这本书的第一章的相关部分.
变量
和其它语言一样Shell中也有变量, 而且更简单, 但有一些比较特殊的地方.
- Shell中的变量只有字符串这一种类型
- Shell中变量名与变量值没有长度限制
- Shell的变量也允许比较操作和整数操作, 只要变量中的字符串为数字
定义变量
variable_name=ghui
需要注意: = 两边不能加空格, 当赋值语句包含空格时请加引号(单引号/双引号均可)比如:
variable_name="ghui's blog"
Shell中的变量可以分为两种类型:
local
与其它语言一样局部变量的可见范围是代码块或函数内, 全局变量在全局范围内可见.看个简单的例子:
#! /bin/sh
num=111 #全局变量
func1()
{
local num=222 #局部变量
echo $num
}
echo "before---$num"
func1
echo "after---$num"
输出:
before---111 222 after---111
使用变量
使用一个定义过的变量, 只要在变量名前面加$即可, 如:
name=ghui
echo $name
echo ${name} #{} 为了帮助解释器识别变量边界, 非必须
在使用变量时还有一个地方需要注意, 请看下面的例子:
#! /bin/sh str='abc' echo "1 print $str" echo '2 print $str'
输出:
1 print abc 2 print $str
即:
被双引号括起来的变量会发生变量替换, 单引号不会
注释
Shell中注释使用#, 而且它不支持多行注释.
常用的字符串操作
字符串拼接
name="shell"
sayHi="hello, "$name" !"
sayHi2="hello, ${name} !"
echo $sayHi $sayHi2
注意: 上面说的单双引号引起的变量替换问题
获得字符串长度
string="abcd"
echo ${#string} #输出:4
截取字符串
str="hello shell"
echo ${str:2} #输出: llo shell
echo ${string:1:3} #输出:ell
更多关于字符串的操作可以看这个
if/else流程控制
基本语法结构:
if condition then do something elif condition then do something elif condition then do something else do something fi
其中, elif语句和else语句非必须的.看个例子:
#! /bin/sh a=1 if [ $1=$a ] then echo "you input 1" elif [ $1=2 ] then echo "you input 2" else #do nothing echo " you input $1" fi
很简单, 不过这里有两个地方需要注意, 如果某个条件下的执行体为空, 则你就不能写这个条件 即下面这样会报错:
if condition then #do nothing elif condition then # do nothing #or else #do nothing
[ ]
if [$a=$b] #or if [ $a=$b] #or if [$a=$b ]
if [ $a=$b ]/bin/[
if test "2>3" then ... fi
和
if [ "2>3" ] then … fi
除[]之外, shell语言中还有几种其它括号, 比如: 单小括号/双小括号/双中括号/… , 不同的括号有不同的用法, 更多关于shell中, 括号的用法可以看看这个
switch流程控制
当条件较多时, 可以选择使用switch语句, shell中的switch语句的写法和其它语言还是有些不同的, 基本结构如下:
case expression in pattern1) do something... ;; pattern2) do something... ;; pattern2) do something... ;; ... esac
看个例子:
#! /bin/sh
input=$1
case $input in
1 | 0)
str="一or零";;
2)
str="二";;
3)
str="三";;
*)
str=$input;;
esac
echo "---$str"
1 | 0
;;break)esac
for循环
基本结构:
for name [in list] do ... done
in listin listin "$@"
for file in *.txt do open $file done
遍历当前目录下的所有txt文件, 并依次打开.
while循环
基本结构:
while condition do do something... done
看个例子:
#! /bin/sh i=0 while ((i<5)); do ((i++)) echo "i=$i" done
输出:
i=1 i=2 i=3 i=4 i=5
(())
until循环
基本结构
until condition do do something... done
看个例子:
#! /bin/sh i=5 until ((i==0)) do ((i--)) echo "i=$i" done
输出:
i=4 i=3 i=2 i=1 i=0
跳出循环
breakcontinue
函数
要定义一个函数, 可以使用下面两种形式:
function funcname()
{
do something
}
或者
funcname ()
{
do something
}
看个例子
#! /bin/sh
# ad.sh 计算sum
add()
{
let "sum=$1+$2"
return $sum
}
add $1 $2
echo "sum=$?"
输入
ad 1 2
输出
sum=3
$?
NOTE:
exitreturn
向脚本传递参数
先shell脚本传递参数, 非常简单, 只需要在你执行命令的后面跟上即可, 看个例子:
#! /bin/sh # test.sh echo "$# parameters"; echo "$@"; echo "$0" echo "$1"
输入:
test.sh 11 22
输出:
2 parameters 11 22 test.sh 11
后记
之所以要写这篇博客, 有以下几个原因:
- 想总结一下shell编程中的关键知识点, 方便日后查看.
- 想通过shell优化一下我的hexo写作及博客管理流程, 目前相关脚本已完成, 待我下一篇博客分享给大家, 如果你也是在用Hexo写博客, 相信对你会很有用,
尽请期待!已经发布 - 可以看的出这里总结的都是最关键的知识点, 还有很多这里并没有说. 是因为我觉得刚开始学习一个东西没必要太计较一些细节/琐碎的东西, 掌握好大致知识框架, 然后在大家编写具体的脚本时, 遇到具体问题, 再去google寻找即可.
参考
- 上一篇: shell脚本调试方法
- 下一篇: shell脚本编程及bash特性
相关文章
-
shell脚本调试方法
shell脚本调试方法
- 互联网
- 2026年04月04日
-
Shell脚本关于屏幕输出的字符进行颜色控制的问题
Shell脚本关于屏幕输出的字符进行颜色控制的问题
- 互联网
- 2026年04月04日
-
shell脚本中8种字符串截取方法
shell脚本中8种字符串截取方法
- 互联网
- 2026年04月04日
-
shell脚本编程及bash特性
shell脚本编程及bash特性
- 互联网
- 2026年04月04日
-
shell脚本编程基础
shell脚本编程基础
- 互联网
- 2026年04月04日
-
SHELL脚本编程的常识和VI常用技巧
SHELL脚本编程的常识和VI常用技巧
- 互联网
- 2026年04月04日






