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
posted on 2025-05-14 16:34  拾句  阅读(36)  评论(0)    收藏  举报