Shell 从放弃到入门

2019-11-16  本文已影响0人  winter_sweetie

2019年11月16日更新

嘿,相信你一定见过 xxx.sh 这样的脚本文件, 没准你还有模有样地敲下./xxx.sh这样的语句来让它run起来。

但是你真的知道./是什么神奇的操作吗,文件里echo$1等等奇怪的字符代表什么吗,什么时候要在运行时加参数呢。

让我们一起来探索shell的世界吧!

ps: 学习源是菜鸟教程

1. hello world

1.1 创建

使用vi/vim创建文件,写下我们第一个shell脚本

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

其中,#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。我们这里使用的是Bash,它也是大多数Linux默认的Shell。

echo 用来输出字符串,在这里加不加双引号都行。printf也有同样的功能,而且还能进行强大的格式化输出。

1.2 运行

先cd到相应目录,然后执行

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

注意,一定要写成·./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

2. 变量

your_name="Jack"
echo "Hello, $your_name"
echo "Hello, ${your_name}"

使用变量的时候才加美元符($),定义时不用。

变量名外面加花括号是为了帮助解释器识别变量的边界。推荐给所有变量加上花括号,这是个好的编程习惯。

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的。双引号里可以有变量,还可以出现转义字符。

定义数组的格式是

array_name=(value0 value1 value2 value3)

读取数组元素值的一般格式是:

valuen=${array_name[n]}

3. 传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,其中$0为执行的文件名,$1 为执行脚本的第一个参数,$2 为执行脚本的第二个参数,以此类推……

输入

echo "Shell 传递参数实例!";
echo "第一个参数为:$1";

echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

执行脚本,输出结果如下所示:

$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3

* 与@ 区别:

4. 流程控制

4.1 if

4.1.1 if

if condition
then
    command1 
    command2
    ...
    commandN 
fi

4.1.2 if else

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

4.1.3 if else-if else

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

4.3.4 实例:判断两个变量是否相等

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

注意,代码中[]执行基本的算术运算,如

a=5
b=6

result=$[a+b] # 注意等号两边不能有空格
echo "result 为: $result"

4.2 for

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

in列表可以包含替换、字符串和文件名。

4.3 while

while condition
do
    command
done

while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按<Ctrl-D>结束循环。

echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
    echo "是的!$FILM 是一个好网站"
done
上一篇下一篇

猜你喜欢

热点阅读