shell脚本
Linux shell
shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。shell编程语言具有普通编程语言的很多特定,比如它也有循环结构和分支控制结构等,用这种编程语言编写的shell程序与其他应用程序具有同样的结果
shell和python都是弱语言
定义变量规则 :变量名=值
shell定义的规则
- 变量名=值
- 等号两边不能由空格
- 定义linux命令需要用反单引号``
- 使用:echo $变量名
区分单引号和双引号的不同和相同点
shell脚本的规则
-
脚本名称使用.sh结尾
-
第一行必须写 #!/bin/bash
-
输入语句用read
-
输出语句用: echo
-
调用的时候
./脚本名.sh(权限的问题)
sh 脚本名.sh
注意点:read可以传递多个数据
read -p "input name and password:" name password


参数传参
向.sh文件中传递数据
格式: sh 脚本名.sh 参数
$1:接收第一个参数~~~~$n
$n:文件名称
$@:所有参数s
$#参数格式


比较运算符
比较运算符(数字)
-eq 比较是否相等
-ne 比较不相等
-gt 比较大于
-ge 比较大于等于
-lt 比较小于
-le 小于等于
字符串判断:==,!=
逻辑运算符 -a与 -o或 !非
((i++)) ((i+=1))
s=$(($s+$i)) s=$[$s+$i] ((s=$s+$i))

if语句(分支结构)
格式:
if [条件]
then
语句
else
语句
fi
注意点:
- if后面有空格
- 条件两边有空格
- if条件里面存在变量,需要$,而且变量两边需要双引号
- fi是结束标识
if [ 条件 ]
then
语句
elif [ 条件 ]
then
语句
......
else
语句
fi


Case循环语句
case规则
case $变量名 in
"值")
语句;;
"值")
语句;;
.....
esac


注意:
- Case这第一行以in结尾
- 值可以是字符串也可以是数字,如果数据范围[0-9]
- 结束语句 ;; (语句后面跟两个封号)
- 以esac结束标识
for循环
for 变量 in 列表
do
语句
done

如果列表中的元素过多的时候,需要怎么做?
seq mix step max
注意:mix开始数据 step :间隔 max结束数据,如果step为1,可以忽略
结束标志done
While循环
while [ 条件 ]
do
语句
done

注意:结束done
while后有空格,参数之间也注意
函数
定义格式
函数名(){代码}
调用格式
函数名
注意点:必须先定义一个函数,然后再调用它

参数传递
函数中的参数 使用$n来接收数据


返回值
shell中函数默认存在返回值
查看函数的返回值$?
注意点:
如果没有代码错误默认返回值为0
有代码错误返回1
查看返回值内容:$?


练习
练习1:使用shell脚本,输出当前所在的目录
#!/bin/bash
dir=`pwd`
echo $dir
练习2:计算/etc目录下有多少个文件,用shell脚本实现
#!/bin/bash
cd /etc
filenum=`ls|wc -l`
echo $filenum
实现统计任何指定目录下的文件个数
#!/bin/bash
read dir
cd $dir
filenum=`ls|wc -l`
echo $filenum
判断用户输入的用户名和密码是否为admin 123456,如果是则提示登录成功,否则提示失败
#!/bin/bash
read -p "输入用户和密码:" name password
if [ "$name" == "lucky" -a "$password" == "123456" ]
then
echo "登录成功"
else
echo "失败"
fi
输入数字,判断是否大于0,如果大于0则将该数字-1并输出,否则+1输出
#!/bin/bash
read -p "输入数字" num
if [ "$num" -gt 0 ];then
((num--))
echo $num
else
((num++))
echo $num
fi
判断用户输入的目录是否存在,如果存在则统计目录下的文件个数,否则提示用户该目录不存在
#!/bin/bash
read -p "输入目录名称:" dirname
if test -d "$dirname"
then
cd $dirname
filename=`ls|wc -l`
echo $filename
else
echo "目录不存在"
fi
if [ 条件 ]
then
语句
elif [ 条件 ]
then
语句
else
语句
fi
判断学生的成绩,80<score<=100提示优秀,60<score<=80提示良好,其他则提示不及格
#!/bin/bash
read -p "输入成绩:" score
if [ "$score" -gt 80 -a "$score" -le 100 ]
then
echo "优秀"
elif [ "$score" -gt 60 -a "$score" -le 80 ]
then
echo "一般"
else
echo "不及格"
fi
判断用户输入的内容是否为空,为空则提示,不为空则判断是否为目录,不为目录则判断是否为文件,否则提示错误信息
#!/bin/bash
read -p "请输入:" a
if [ -z "$a" ]
then
echo "为空"
elif [ -d "$a" ]
then
echo "为目录"
elif [ -f "$a" ]
then
echo "为文件"
else
echo "出错"
fi
输入一个序号,判断该用户选择哪款产品,A:笔记本 B:电饭煲 C:小台灯
#!/bin/bash
read -p "输入产品" pro
case $pro in
"A")
echo "笔记本";;
"B")
echo "电饭煲";;
"C")
echo "小台灯";;
esac
请输入对客服的满意度,【0-3】不满意,【4-6】满意,【7-9】非常满意
#/bin/bash
read -p "评价:" pj
case $pj in
[0-3])
echo "不满意";;
[4-6])
echo "满意";;
[7-9])
echo "非常满意"
esac
输出1-6之间的数
#!/bin/bash
for i in 1 2 3 4 5 6
do
echo $i
done
for 变量名 in 列表
do
语句
done
求1-100之间的和
#!/bin/bash
i=1
sum=0
while [ "$i" -le 100 ]
do
sum=$((sum+$i))
((i++))
done
echo $sum

浙公网安备 33010602011771号