Shell 脚本编程 基本语法:

时间:2022-12-30 15:50:26

Shell 脚本编程语法:

注:

文章来源 http://www.cnblogs.com/yunquan/p/6821850.html

视频来源:https://www.bilibili.com/video/av10565321/index_1.html?t=684


这里每个语句都要有空格控制,不然语法错误

1.文件格式

以.sh后缀
在文件里,第一行写环境变量 #!/bin/bash
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin ....
//保证在其他电脑,也能运行(这里是配置环境)
export PATH
exit 0 (=C语言return 0,可以省略)跳出,不继续向下执行

2.执行sh

1)bash .sh文件
2)./.sh文件
3)source .sh文件

3.read

read -p(提示字符) "请输入你的名字" name(变量)

echo "hello" $name

4.判断式

** test命令:
-e 该【档名】是否【存在】 (exist)?(常用)
-f 该【档名】是否是【档案】(file)?(常用)
-d 该【文件名】是否为【目录】(directory)?(常用)** -r 侦测该档名是否是具有【可读】属性?
-w 侦测该档名是否是具有【可写】属性?
-x 侦测该档名是否是具有【可执行】属性? -eq 两数相等(equal0)
-ne 两数值不相等(not equal)
-gt n1 > n2 (greater than)
-lt n1 < n2 (less than)
-ge n1 >= n2(greater than or equal)
-le n1 <= n2(less than or equal)

eg:

    #!/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"

$0是第一个参数,下面的 -n 参数是判空,是假的就不执行,是真的执行后面语句,最后exit

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

5.条件判断式

if ...then

if [];then ......
elif [];then ......
else ......
fi(结束语)
exit 0

eg:

#!/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(脚本的第一个参数,从bash外面输入的) in
"one")
h 1
;;
"two")
h 2
;;
"three")
h 3
;;
*)
echo "只能用123"
;;
esac

LOOP

while do done

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

6.shell script 的追踪与debug

    -n  不执行script,仅查询语法问题:
-v 执行script前,先将script 的内容输出到屏幕上
-x 将使用到的script内容显示到屏幕上,这是很有用的参数