一、
1、Shell是什么?
Shell是一个命令行的解释器,随内核一起启动,用来解释linux下的命令传输给计算机,是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为程序设计语言,定义了各种变量与参数,并提供了许多高阶语言所具有的控制结构,包括循环与分支。
写脚本不需要编译,直接添加可执行X命令。
Shell提供了操作系统与人之间的通讯方式,可以是交互方式(从键盘输入,并且立即响应)【阻塞】,或以shell script(非交互)方式执行。
2、程序基础:
第一步:#!/bin/sh或bas
#!告诉系统后面的参数用来执行该文件的程序
第二步:要使脚本可执行,修改权限
chmod +x filname
第三步:通过输入:./filename 来执行
3、变量:变量名=值
取出变量值可以加一个美元符号$在变量前面;
变量赋值时,不加空格,无分号;
例:①#!/bin/sh
a=“hello world”
echo “A is :”
echo $a
②在编辑器输入以上内容,然后保存文件HelloWorld之后执行
chmod +x HelloWorld
③输入 ./HelloWorld 执行该脚本
有时变量名很容易与其他名字混淆,需添加{}来告诉shell
例:echo “this is the ${num}nd”
4、默认变量:
$#:传入脚本的命令行参数个数;
$*:所有命令行参数值,各参数间留有空格;
$0:命令本身;
$1:第一个命令行参数;
$2:第二个命令行参数;
例:# ./ s2 12 sf bsn 77
命令$0 参数$1 $2 $3 $4
5、局部变量与全局变量(看定义位置)
二、shell语句
1、if语句
单分支:If [ expression ]
then
#code block
fi
双分支:If [ expression ]
then
#code block
else
#code block
fi
多分支:If [ expression ]
then
else if [ expression ]
then
#code block
else
#code block
fi
fi
比较操作 整数操作 字符串操作
相同 -eq =
不同 -ne !=
大于 -gt >
小于 -lt <
大于或等于 -ge
小于或等于 -le
为空 -z
不为空 -n
注意:在“[”和“]”两边都留有空格;在“=”两边都有空格;
例:
#!/bin/bash
a=$1
b=$2
if [ -z $a ] || [ -z $b ]
then
echo "please enter 2 no"
exit 1
fi
if [ $a -eq $b ] ; then
echo "number a = number b"
else if [ $a -gt $b ]
then
echo "number a>number b"
elif [ $a -lt $b ]
then
echo "number a<number b"
fi
fi
-e:文件已存在 -s:文件大小不为0 -r:读 -x:执行
-f:文件是普通类型 -d:文件是一个目录 -w:写
例:
#!/bin/sh
folder=/home
[ -r "$folder" ] && echo "Can read $folder"
[ -f "$folder" ] || echo "this is not file"
2、For语句
基本结构:
for var in [list]
do
#code block
done
Var:循环控制变量,[list]是var需要遍历的一个集合
do/done包含了循环体,相当于C语言中的大括号
do 和 for 被写在同一行,必须在do前面加“;”
如:for var in [list] ; do
注意:in后面接几个文件名,若没有双引号括起来,则一个一个输出,若有双引号,则一起输出,当成一个字符串。
例:检查当前目录有几个文件
#!/bin/bash
counter=0
for files in *
do
counter=`expr $counter + 1`
done
echo "There are $counter files in `pwd` we need to process"
3、while语句(当型循环)
while [ condition ]
do
#code block
Done
4、untill语句
Untill [ condition ]
do
#code block
done
while与untill的区别在于while为真时执行,untill为假时执行。
一个命令执行成功,返回给系统0,失败返回1,;!为错误标号。
5、case语句(开关语句)
case “$var” in
condition1)
;;
condition2)
;;
*)
default statements
esac
例:
#!/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