Shell脚本语法基础

Shell是linux下的一个命令解析器,把一系列的命令序列写入文本文件就构成了Shell脚本(类似于windows中的批处理)
#!/bin/sh
#echo something
echo "hello world"
echo "hello !!"
mkdir /tnt

符号#!用来指定该脚本文件的解析程序。在上面例子中使用/bin/sh来解析该脚本。
以#开头的句子表示注释,直到这一行的结束。

变量的引用,文件s2
#!/bin/sh
#set varible a
a="hello world"
#print a
echo "A is:"
echo $a
#!/bin/sh
#set varible num
num=2
echo "this is the ${num}nd"

默认变量
$# :传入脚本的命令行参数个数
$* :所有命令行参数值,在各个参数值之间
留有空格
$0 :命令本身(shell文件名)
$1 :第一个命令行参数
$2 :第二个命令行参数
#!/bin/sh
echo "number of vars:"$#
echo "values of vars:"$*
echo "value of var1:"$1
echo "value of var2:"$2
echo "value of var3:"$3
echo "value of var4:"$4
运行 ./s2 1 2 3 4
[root@localhost smb]# ./s3 1 2 3 4
number of vars:4
values of vars:1 2 3 4
value of var1:1
value of var2:2
value of var3:3
value of var4:4


在变量首次被赋值时加上 local 关键字可以声明一个局部变量 文件s3
#!/bin/bash
hello="var1"
echo $hello
function func1 {
    local hello="var2"
    echo $hello
    }
func1
echo $hello

结果
[root@localhost smb]# ./s4
var1
var2
var1



If语句
if [ expression ]
then
    #code block
fi

if [ expression ]
then
    #code block
else
    #code block
fi
if [ expression ]
then
    #code block
else if [ expression ]
    then
        #code block
    else
        #code block
    fi
fi
if [ expression ]; then
    #code block
elif [ expression ]
    then
        #code block
    else
        #code block
    fi
fi

比较
比较操作     整数操作     字符串操作
相同              -eq                =
不同              -ne !              =
大于               -gt                >
小于               -lt                <
大于或等于     -ge
小于或等于     -le
为空               -z
-e 文件已经存在
-f 文件是普通文件
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可以读取
-w 文件对当前用户可以写入
-x 文件对当前用户可以执行
文件s5
#!/bin/sh
folder=/home
[ -r "$folder" ] && echo "Can read $folder"
[ -f "$folder" ] || echo "this is not file"

for循环
for var in [list]
do
    #code block
done
文件s6
#!/bin/bash
for day in Sun Mon Tue Wed Thu Fri Sat
do
    echo $day
done
结果
[root@localhost smb]# ./s6
Sun
Mon
Tue
Wed
Thu
Fri
Sat


while循环和until循环
while [ condition ]
do
    #code block
done
until [ condition ]
do
#code block
done
while 和 until的区别在于while是为真时执行,until是为假时执行

case语句
case "$var" in
condition1 )
    ;;
condition2 )
    ;;
* )
default statments;;
esac
例子s7
#!/bin/bash
echo "Hit a key, then hit return."
read Keypress
case "$Keypress" in
    [A-Z] ) echo " Uppercase letter";;
    [a-z] ) echo " Lowercase letter";;
    [0-9] ) echo "Digit";;
    * ) echo "Punctuation, whitespace, or other";;
esac
结果
[root@localhost smb]# ./s7
Hit a key, then hit return.
a
Lowercase letter
[root@localhost smb]# ./s7
Hit a key, then hit return.
B
Uppercase letter


注意:
Q1: 当编辑好脚本后,如果要执行该脚本,还必须使其具有可执行属性。chmod +x filename
Q2: 变量赋值时,“=”左右两边都不能有空格;比较语句时“=”左右两边都要有空格
Q3: 在shell编程中,所有的变量都由字符串组成,并且不需要预先对变量进行声明

猜你喜欢

转载自blog.csdn.net/sinat_27614619/article/details/80488681