shell脚本
shell命令:
示例

变量定义:变量=变量名
#name=zhangsan 定义变量,没空格不用加引号
#name="zhang san" 定义变量中有空格加双引号
#echo $name echo输出,引用变量
定义的变量是命令
#n=`ls` 定义的变量是命令加反单引号
#echo $n 引用变量
shell脚本规范
1、输出当前所在目录
#vi ceshi.sh 创建文件以.sh结尾
#!bin/bash
dir=`pwd`
echo $dir
#./ceshi.sh 执行文件
#sh ceshi.sh 权限不够,方案一
#chmod +x ceshi.sh 权限不够,方案二加权限
2、统计etc目录下有多少个文件
#!bin/bash 固定写法,表示以下是shell脚本
#进入etc目录下 注释
cd /etc
filename=`ls -l|wc -l`
echo "该目录下有$filename个文件"
通过键盘输入:read
单个变量输入
#read a 输入变量a
#zhang 可输入变量a的值,假设输入zhang
#echo #$a 输出内容
#zhang
多个变量输入:
#read a b 输入变量a
#zhang wang 可输入变量a b 的值;若变量值大于变量名,则多出的变量值会赋值给b
#echo #$a 输出a的内容
#zhang
#echo #$b 输出b的内容
#wang
统计输入的目录下有多少个文件:示例
#!/bin/bash
#输入目录
read -p "请输入目录:" dir #read -p "提示的内容" 变量名 --注意变量名前有空格
#进入etc目录下
cd $dir
filenum=`ls -l|wc -l`
echo "该目录下有$filenum个文件"
参数传递
$1 #表示第一个参数
$0 #表示该文件的名称
$@ #显示所有的参数
$# #参数的个数
#!/bin/bash
echo "这个数据是$1"
echo "这个数据是$3"
echo "这是$0"
echo "这是$@"
echo "这是$#"
#./文件名.sh 第1个参数 第2个参数 第3个参数
举例:执行
#./ceshi.sh 100 200 300
这个数据是100
这个数据是300
这是ceshi.sh
这是100 200 300
这是3
统计第一个输入的参数下有多少个文件
#!/bin/bash
#进入etc目录下
cd $1 #接收传递的第一个参数
filenum=`ls -l|wc -l`
echo "该目录下有$filenum个文件"
重定向:
已知存在文件a.txt
#ls -l >a.txt 内容会覆盖
#ls -l >>a.txt 内容会追加
if...else 条件语句
if [ 条件 ] #if后面有空格,[]条件两边要空格,多个条件中要空格;如果条件存在变量,那变量两边要双引号
then #then可以和if同一行,只需加上;,比如 if [ 条件 ];then
语句
else
语句
fi #结束语句
涉及知识点:字符串间的判断: ==字符串是否相等,!=是否不相等
练习:判断 /root目录是否为空
#!/bin/bash
dir=`ls /root`
if [ "$dir" == "" ]
then
echo "目录为空" echo前面空格只是为了格式好看
else
echo "目录不为空"
fi
练习:通过用户输入任意目录判断是否为空
#!/bin/bash
read -p "请输入目录:" dir
d=`ls $dir`
if [ "$d" == "" ];then
echo "目录为空"
else
echo "目录不为空"
fi
练习:判断用户输入的用户名和密码是否为admin 123456,如果是则提示登录成功,否则提示失败
#!/bin/bash
#提示用户输入用户明和密码
read -p "请输入你的用户名和密码:" username passwd
#进行判断
if [ "$username" == "admin" -a "$passwd" == "123456" ]
then
echo "登录成功"
else
echo "登录失败"
fi
if...elif...else 条件语句
if [ 条件 ] #if后面有空格,[]条件两边要空格,多个条件中要空格;如果条件存在变量,那变量两边要双引号
then
语句
elif [ 条件 ]
then
语句
else
语句
fi
1.练习:判断学生的成绩,大于90-100提示优秀,80-90之间提示良好,70-80之间则提示一般,60-70之间提示及格。其他则提示不及格
#!/bin/bash
#提示用户输入分数
read -p "请输入你的分数:" score
#进行判断
if [ "$score" -ge 90 -a "$score" -le 100 ]
then
echo "优秀"
elif [ "$score" -ge 80 -a "$score" -lt 90 ]
then
echo "良好"
elif [ "$score" -ge 70 -a "$score" -lt 80 ]
then
echo "一斑"
elif [ "$score" -ge 60 -a "$score" -lt 70 ]
then
echo "及格"
else
echo "西西睡把"
fi
case语句
格式:
case $变量名 in #in必须写
"值")
语句;;
"值") #值可以是区间范围,必须是[0-9]
语句;; #;;结束语句
...
esac #case语句结束
输入一个序号,判断该用户选择哪款产品,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
循环语句
for循环格式:
for 变量名 in 列表
do
语句
done #结束语句
以上列表可为,由于是命令,列表内容需要加反单引号:
seq start size max
举例:`seq 1 2 10` #从1开始间隔2,到10结束
start:开始点
size:间隔,如果为1,可省略
max:结束点
循环练习:
1.练习:输出1-10之间的数
#!/bin/bash
#循环
for i in 1 2 3 4 5 6 7 8 9 10
do
echo $i
done
2.求1-100之间的和
#!/bin/bash
#循环
for i in `seq 1 10`
do
echo $i
done
while循环格式:
while [ 条件 ]
do
命令
done
练习求1-100之间的和
#!/bin/bash
i=1
sum=0
while [ $i -le 100 ]
do
sum=$(($sum+$i))
((i++))
done
echo $sum
逻辑运算符
且:-a
或者:-o
非:!
是否相等:-eq
是否不相等:-ne
是否大于:-gt
是否大于等于:-ge
是否小于:-lt
是否小于等于:-le
数字变量操作
((i++)) ((i+=1)) i=$[$i+1] let i=i+1 i=$(($i+1))
test 参数 变量名---->测试文件的状态
-e 表示文件是否存在
-f 表示文件是否存在且为文件
-d 表示文件名是否存在且为目录
-r 可读
-w 可写
-x 可执行
文件判断:
-r -r filename 文件是否存在且可读
-w -w filename 文件是否存在且可写
-x -x filename 文件是否存在且可执行
-f -f filename 文件是否存在且是普通文件
-d -d filename 文件是否存在且是一个目录
-e -e filename 文件是否存在
-n -n str1 字符串长度是否不等于0
-z -z str2 字符串长度是否等于0
练习:判断用户输入的用户名和密码是否为admin 123456,如果是则提示登录成功,否则提示失败
#!/bin/bash
#提示用户输入用户明和密码
read -p "请输入你的用户名和密码:" username passwd
#进行判断
if [ "$username" == "admin" -a "$passwd" == "123456" ]
then
echo "登录成功"
else
echo "登录失败"
fi
练习:输入数字,判断是否大于0,如果大于0则将该数字-1并输出,否则+1输出
变量运算的多种写法
#!/bin/bash
#输入数字
read -p "please input a num:" num
#判断
if [ "$num" -gt 0 ]
then
((num--))
echo $num
else
((num++))
echo $num
fi
练习:判断用户输入的目录是否存在,如果存在则统计目录下的文件个数,否则提示用户该目录不存在
#!/bin/bash
#提示用户输入
read -p "请输入一个目录:" dir
#进行判断
if test -d $dir #-d 表示文件名是否存在且为目录
then
#统计文件的个数
filenum=`ls -l $dir|wc -l`
echo "目录$dir下的文件个数为$filenum"
else
echo "目录不存在"
fi
练习:判断用户输入的内容是否为空,为空则提示,不为空则判断是否为目录,不为目录则判断是否为文件,否则提示错误信息
#!/bin/bash
#提示用户输入
read -p "请输入内容:" con
if [ -z "$con" ]
then
echo "为空"
elif [ -d "$con" ]
then
echo "是目录"
elif [ -f "$con" ]
then
echo "是文件"
else
echo "错误"
fi
函数
定义:
函数名(){
代码
}
函数名 #调用
练习1,函数返回值,默认存在返回值0,若语句错误返回值为1,查看返回值echo $?
#!/bin/bash
hello(){
echo "helloWorld"
}
hello #调用函数
echo $?
练习2:输入任意两整数求和,打印结果
#!/bin/bash
add(){
echo "第一个数据是$1"
echo "第一个数据是$2"
}
add2(){
s=(($1+$2))
echo $s
}
#从键盘输入
read -p "请输入第一个数据:" num
read -p "请输入第二个数据:" num2
add2 $num $num2 #调用
练习3:判断用户输入的内容是否为空,为空则提示,不为空则判断是否为目录,不为目录则判断是否为文件,否则提示错误信息,函数实现
#!/bin/bash
createfile(){ #创建文件函数
cd $1 #进入目录
read -p "请输入文件:" filename #提示用户输入文件
if [ -f "$filename" ] #判断文件是否存在
then
echo "文件已经存在"
else
echo "文件不存在"
echo "开始创建文件"
touch $filename
echo "文件创建成功"
fi
}
read -p "请输入一个目录:" dir #提示用户输入
#进行判断
if [ -d $dir ] #-d 表示文件名是否存在且为目录
then
createfile $dir #调用创建文件函数
else
echo "目录不存在"
fi
浙公网安备 33010602011771号