Shell是命令解析器,将用户的指令转换为相应的机器能够运行的程序。
Shell脚本是一个包含一系列命令序列的文本文件。当运行这个脚本文件时,文件中包含的命令序列将得到执行。
ex1:脚本范例
#!/bin/sh
#echo something
echo "hello world"
mkdir /tnt
注意:
第一行:#!用来指定该脚本程序的解析程序,开头的第一行只能有这些:#!/bin/sh
第二行:注释,在进行shell编程是,以#开头的句子表示注释,直到这一行的结束。
ex2:变量的使用
在shell编程中,所有的变量都是由字符串组成,并且不需要预先对变量进行声明。
#!/bin/sh
#set varible a
a="hello world"
#print a
echo "A is:"
echo $a
注意:变量的申明无需加$,但是再次引用时需加$,echo 命令会自动加上换行符,如果想要其解析转义字符"\n",需加-e选项。
比如:
#!/bin/sh
#set varible a
a="hello world\n"
#print a
echo -e "A is:\n"
echo -e $a
使用花括号来告诉shell我们要打印的是num变量
#!/bin/sh
#set variable num
Num=2
Echo “this is the ${num}nd”
ex3:默认变量的使用
$#:传入脚本的命令行参数的个数
$*:所有命令行参数值
$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
执行命令:# ./ex3 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
ex4:变量的声明
#!/bin/sh
#set varible num
num1=11111
echo "this is the ${num1}nd"
num2=2222
echo "this is the $num2nd"
运行结果:
this is the 11111nd
this is the
注意:对于没有事先声明的变量,echo输出值为空
ex5:全局与局部变量的使用
#!/bin/bash
hello="var1"
echo $hello
function func1
{
local hello="var2"
echo $hello
}
func1
echo $hello
输出结果:
var1
var2
var1
1. 变量赋值是,“=”左右两边都不能有空格
2. BASH中的语句结尾不需要分号
ex6:文件和目录的属性
#!/bin/sh
folder=/home/smb
[ -r "$folder" ] && echo "Can read $folder"
[ -f "$folder" ] || echo "this is not file"
输出结果:
Can read /home/smb
this is not file
ex7:循环
#!/bin/bash
for day in Sun Mon Tue Wed Thu Fri Sat #the first loop
do
echo $day
done
echo "**************"
for day in "Sun Mon Tue Wed Thu Fri Sat" #the second loop
do
echo $day
done
执行结果:
Sun
Mon
Tue
Wed
Thu
Fri
Sat
**************
Sun Mon Tue Wed Thu Fri Sat
注意:列表被双引号括起来会被认为是一个元素
ex8:case的使用
使用格式:
case "$variable" in
"$condition1" )
command...
;;
"$condition2" )
command...
;;
esac
注意: 对变量使用""并不是强制的, 因为不会发生单词分割;每句测试行, 都以右小括号)来结尾;每个条件判断语句块都以一对分号结尾 ;;;case块以esac (case的反向拼写)结尾.
示例如下:
#!/bin/bash
echo "Hit a key, then hit return."
read Keypress
echo "the leller you typed is $Keypress"
case "$Keypress" in
[a-z] ) echo "Lowercase letter";;
[A-Z] ) echo "Uppercase letter";;
[0-9] ) echo "Digit";;
* ) echo "Punctuation, whitespace, or other";;
esac