首页 > 代码库 > 鸟哥的Linux私房菜——第十六章:学习Shell Scripts

鸟哥的Linux私房菜——第十六章:学习Shell Scripts

 

  视频链接:

 

1. 什么是 Shell Script            (shell写的脚本)
1.1 干嘛学习 shell scripts?      ()
1.2 第一支 script 的撰写与执行
1.3 撰写 shell script 的良好习惯建立  
2. 简单的 shell script 练习:      (read -p  date)
3. 善用判断式:
3.1 利用 test 指令的测试功能
3.2 利用判断符号 [ ]          
3.3 Shell script 的预设变数($0, $1...)
4. 条件判断式:
4.1 利用 if .... then
4.2 利用 case ..... esac 判断
4.3 利用 function 功能
5. 循环 (loop)
5.1 while....do....done, until....do....done
5.2 for...do...done
6. shell script 的追踪与 debug

 

 

 

第一个shell scripts的撰写,我们写入一个test.sh的文档内

#!/bin/bash
PAth=自己echo $PATH一下
ecport PATH echo
-e "Hello shuyunquan \n" exit 0

然后这样执行  

bash test.sh

 

接下来来一个进阶的scripts吧,我们加入一个read

技术分享

 

test命令 其实就是判断的用途,我列出常用的参数,然后再举个例子

技术分享

技术分享

技术分享

技术分享

 

 

 

 

[] 命令,也是判断用的,有趣的是,test命令的参数[]都能用

[]需要注意的几点

技术分享

我们来练习一道例题

1. 当执行一个程序的时候,这个程序会让使用者选择 Y 或 N ,
2. 如果使用者输入 Y 或 y 时,就显示『 OK, continue 』
3. 如果使用者输入 n 或 N 时,就显示『 Oh, interrupt !』
4. 如果不是 Y/y/N/n 之内的其它字符,就显示『I don‘t know what is your choise』

 

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
export PATH
read -p "请输入(Y/N):"  yn
[ "$yn" == "Y" -o "$yn" == "y" ] && echo "ok,continue" && exit 0
[ "$yn" == "N" -o "$yn" == "n" ] && echo "oh,intsdsd" && exit 0
echo "我不信这个也能出来" && exit 0

 

shell scripts的预设变数($0 $1 $2)

这个理解起来很简单,脚本名称就是$0   然后第一个参数就是$1 第二个参数就是$2 ...以此类推

好,我们来个简单的例子

#!/bin/bash

echo "The scripts name is $0"
[ -n "$1" ] && echo "第一个参数是: $1" || exit 0
[ -n "$2" ] && echo "第二个参数是: $2" || exit 0

 

if...then 

if [ ] ; then

  ......

elif [ ] ; then

  .......

else

  ........ 

fi

exit 0

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
export PATH
read -p "请输入(Y/N):"  yn
if [ "$yn" == "Y" -o "$yn" == "y" ];then
         echo "ok,continue"
elif [ "$yn" == "N" -o "$yn" == "n" ];then
        echo "oh,intsdsd" 
else
        echo "我不信这个也能出来" 
fi
exit 0       

 

case ... in ... esac

#!/bin/bash
case $1 in
        "hello")
                echo "hello,how are you"
                ;;
        "")
                echo "你必须输入参数"
                ;;
        *)
                echo "要输入hello啊"
                ;;
esac

 

function 函数  

#!/bin/bash


function h()
{
   echo "蜀云泉好帅啊 $1"    //function函数也有变量,$1就是函数的参数,这个和脚本的变量不同
}

case $1 in
        "one")
                h 1
                ;;
        "two")
                h 2
                ;;
        "three")
                h 3
                ;;
        *)
                echo "只能用123"
                ;;
esac

 

循环loop

 

 

while do done   注意,while里面的判断式!  符合while条件的才进去循环

#!/bin/bash
read -p "请输入一个数字:" number
i=0
s=0
while [ "$i" -lt  "$number" ]    //这里的小于号是 -lt 注意!
do
i=$(($i+1))              //这里为什么要两个()?因为()有运算的意思
s=$(($s+$i))
done
echo -e "‘1+2+...+$number‘ 的结果是: $s "                             

大家可以试试echo (1+2)是不会出来3的,而echo ((1+2))才会出来3,所以()有一个整体运算的意思

 

untile do done  条件不符合的才进去

 

 

for...do...done 下面是第一种用法

#!/bin/bash

s=0
for((i=1;i<=100;i++))
do
        s=$(($s+$i))
done

echo $s

for的第二种用法  animal会循环依次显现三种内容

#!/bin/bash

for animal in dog cat elephant
do
        echo "这次的动物是 $animal"
done      

 

shell script的追踪与debug

就是你写的脚本有没有问题,bash自带参数就能检查

技术分享

 

鸟哥的Linux私房菜——第十六章:学习Shell Scripts