Linux Shell 脚本的基础
学习 Linux 不可避免的要遇到各种脚本 , 有时候也会需要将一些频繁使用的命令写在脚本里 ,下次再用到这些命令组合的时候 , 直接调用脚本完成 , 是偷懒的利器。
这篇文主要是记录 Shell 脚本基础 , 适合血统纯正的小白食用
Shell 是什么
Shell 是用户与 Linux 操作系统沟通的桥梁 , 用户既可以输入命令执行 , 又可以利用 Shell 脚本编程 , 完成更加复杂的操作。
简单来说 , 在 Linux 上输入的命令或者编写的脚本都是依靠 Shell 来执行。
Shell 基础
脚本的编写与执行
首先 , 先使用 touch 命令创建一个脚本文件。并打开该脚本文件。Shell 脚本的第一行必须是:
#!/bin/sh
用来指定解释此脚本文件的 Shell 程序。
当编写完脚本后 , 需要用
chmod +x file
命令 , 使文件可执行 , 再使用
./file
执行脚本即可。
那么 , 现在就写个 ‘Hello World’ 体验一下吧~
#!/bin/bash
#对变量赋值
hello='Hello World'
#打印变量的值
echo $hello
然后按照上面的方法 , 执行该脚本即可。
Shell 常用语法与命令
在脚本中 , 常用的是变量赋值 , Unix 命令和判断语句与循环语句。
1. 变量赋值
在上面编写打印 “Hello World” 的脚本中 , 已经使用到了变量赋值。
hello='Hello World‘
这行语句就是把 Hello World 这个字符串赋值给变量名为 hello 的变量。
注意:在给变量赋值的时候 , 等号两边不能有空格。
通过 “$变量名” 可以取出变量的值。但有一种特殊情况 , 当取出来的变量需要和其他字符串组合。如:
num=2
echo "this is $numnd"
这时候执行文件并不会打印出
this is 2nd
而是打印
this is
这是因为 shell 回去搜寻名叫 numnd 的变量。但是这个变量是没有值的 , 因此打印出来的字符串变量部分就是空的。
这时候我们只需要将命令改成:
echo "this is ${num}nd
就可以了。
当脚本中需要获取输入的参数时 , 通过如下方式获取:
$1 获取第一个参数
$2 获取第二个参数
...
如:
#!/bin/bash
echo "the first argument is $1"
echo "the second argument is $2"
同时在执行脚本时 , 需要添加两个参数:
./file arguemnt1 argument2
常用命令
最开始就说 , 学习 shell 脚本可以用来偷懒 , 当经常需要用到一些命令组合的时候 , 可以将这些命令写在脚本中 , 需要用到的时候 , 直接执行脚本即可。如:#!/bin/bash halt reboot
轻松实现 Linux 系统关机重启。
3. 判断语句与循环语句
- 判断语句
if 表达式, 如果条件为真, 则执行 then 后面的部分
if......;then
....
elif......'then
....
else
....
fi
通常使用 “[ ]” 来表示条件。如:
[ -f "filename"] :判断 filename 是否是文件
[ "$a" = "$b" ] 判断两个变量的值是否相等
...
举个例子 , 检查使用的 shell 是否 bash:
#!/bin/bash
if [ "$SHELL"="/bin/bash" ];then
echo "your login shell is the bash"
else
echo "your login shell is not the bash but $SHELL"
fi
循环语句
格式如下:for var in ....; do .... done
for 循环表达式查看一个字符串列表 (字符串用空格分隔) 然后将其赋给一个变量。如:
for I in a b c d
do
#输出字符串列表
echo " $I"
done
到这里 , 一些基本操作已经完成了。接下来试一个简单的例子。
#!/bin/bash
OLD="$1"
NEW="$2"
for file in $3;
do
if [ -f "$file" ];then
newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`
if [ -f "$newfile" ];then
echo "ERROR: $newfile exists already"
else
echo "renaming $file to $newfile"
mv "$file" "$newfile"
fi
fi
done
该脚本用于重命名文件 , 第七行 , 通过 sed 命令将文件名中指定字符替换生成一个新的文件名 , 最后通过 mv 命令重命名了文件。