Shell day1

本文介绍了shell的基础概念,如shell脚本、变量声明与释放、特殊变量、双引号和单引号的作用,以及如何使用shell脚本进行目录操作、参数传递、重定向、条件判断和文件操作。通过实例演示了如何检查目录、判断目录内容和进行基本逻辑运算。
摘要由CSDN通过智能技术生成

shell介绍

shell是一段应用程序,是用户和操作系统交互的桥梁,它是弱类型语言,不需要指定变量的类型
shell脚本是以sh结尾的文件
sh文件的第一行内容为#!/bin/bash,表示使用shell进行编程
shell注释:#

shell语法

变量
变量名=变量值,等于号两边不能有空格
变量名规范
不能以数字开头,字母、数字、下划线组成
输出变量内容echo $变量名
变量的释放 unset 变量名

特殊的变量

带有空格的变量定义
双引号如果变量值存在 变 量 名 的 话 , 那 么 输 出 结 果 就 是 变 量 名 对 应 的 变 量 值 , 如 果 要 原 样 输 出 内 容 , 可 以 在 变量名的话,那么输出结果就是变量名对应的变量值,如果要原样输出内容,可以在 变量名前面添加转义字符
单引号 如果变量值中存在$变量名,那么原样输出
反单引号`` 存放的是命令
使用shell脚本,输出当前目录
新建.sh文件 例如建一个名为script的shell文件

vi script.sh

在文件中编写脚本
执行
sh 文件名.sh
添加x权限:chnod +x 文件名.sh

sh script.sh

chnod +x script.sh

执行./文件名.sh

./script.sh

计算/etc目录下有多少个文件

#!/bin/bash
#进入etc目录下
cd /etc
filename="ls -l|wc -l"
echo "该目录下有$filename个文件"

统计任何指定目录下的文件个数
通过键盘输入 read 变量名 变量名可以一个或多个,变量名用空格隔开,变量值用空格隔开 如果变量值多于变量名,那么会把多余的变量值赋给最后一个变量 可以添加提示信息:read -p"提示内容" 变量名

read a
chen
echo $a

read a b
aaa bbb
echo $a
echo $b
#!/bin/bash
#输入目录
read dir
read -p "请输入目录:" dir
#进入etc目录下
cd $dir
cd /etc
filename="ls -l|wc -l"
echo "该目录下有$filename个文件"

运行

sh script.sh
/etc
/tmp

参数传递

$0这是该文件的名称
$1这是第一个参数
$2这是第二个参数
···
$@这是显示所有参数
$#这是显示参数个数

重定向
正确的命令

覆盖:命令1>文件名 如:ls 1>a.txt
追加:命令1>>文件名 如:ls /tmp 1>>a.txt

错误的命令

覆盖:命令2>文件名 如:ls 2>a.txt
追加:命令2>>文件名 如:ls /tmp 2>>a.txt

程序的结构
分支结构if else

if [ 条件 ]
then
语句
else
语句
fi

注意:1.条件两边要有空格,2.多个条件间存在空格,3.if后面要有空格,4.条件中如果存在变量,那么变量两边要有双引号如:name=“chengliang” —>echo $name N=“chenliang”

练习:判断根目录/root是否为空

ls /root
字符串的比较:==判断是否相等,!=判断是否不相等

vi script.sh

应用一:

#!/bin/bash
dir=' ls /root '
if [ "$dir" == "" ]
then
	echo "目录为空"
else
	echo "目录不为空"
fi

应用二:

#!/bin/bash
dir=' ls /root '
if [ "$dir" == "" ]:then
	echo "目录为空"
else
	echo "目录不为空"
fi

任意目录:

#!/bin/bash
read -p "请输入目录:" dir
d='ls $dir'
if [ "$d" == "" ]:then
	echo "目录为空"
else
	echo "目录不为空"
fi

练习:通过用户输入的用户名和密码是否为admin 123456,如果是则提示登录成功,否则提示失败
逻辑运算符:且-a,或者-o,非!

#!/bin/dash
#提示用户输入用户名和密码
read -p '请输入用户名和密码:' username password
#进行判断
if [ "$username" == "admin" -a "$password" == "123456" ]
then
	echo "登录成功"
else
	echo "登录失败"
fi

练习:输入数字,判断是否大于0,如果大于0则将该数字-1输出,否则+1输出
比较运算符

-eq	判断是否相等
-ne	判断是否不相等
-gt	判断是否大于
-ge	判断是否大于等于
-lt		判断是否小于
-le	判断是否小于等于

数字变量操作:
((i++))
((i+=1))
i=$[$i+1]
let i=i+1
i=$(($i+1))

例:

#!/bin/bash
#输入数字
read -p "please input a number" num
#判断
if [ '$num' -gt 0 ]
then
	((num--))
	echo $num
else
	((num++))
	echo $num
fi

练习:判断用户输入的目录是否存在,如果存在则统计目录下的文件个数,否则提示用户该目录不存在
test 参数 变量名

-e表示文件是否存在
-f表示文件是否存在且为文件
-d表示文件名是否存在且为目录
-r可读
-w可写
-x可执行
-n字符串长度是否不等于0
-z字符串长度是否等于0

例:

#!/bin/bash
#提示用户输入
read -p "请输入一个目录" dir
#进行判断
if test -d $dir
then
	#统计文件个数
	filenum=' ls -l $dir|wc -l'
	echo "目录$dir下的文件个数为$filenum"
else
	echo "目录不存在"
fi

if…elif…else分支

if [ 条件 ]
then
语句
elif [ 条件 ]
then
语句
elif [ 条件 ]
then
语句
else
语句
fi

练习:判断学生成绩,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

判断文件

#!/bin/bash
#提示用户输入
read -p "请输入内容" con
if [ -z "$con" ]
then
	echo "为空"
elif [ -d "$con" ]
then
	echo "是目录"
elif [-f "$con"]
then
	echo "是文件"
else
	echo "错误"
fi

case分支

case $变量名 in 
"值")
语句;;
"值")
语句;;
"值")
语句;;
...
*)
语句;;
esac

注意:
1.case 这一行最后必须为in
2.;;结束语句
3.*默认
4.esac case语句的结束
5."值"可以是数字/字符串
6."值"的区间范围为[0-9]

例子:

#!/bin/bash
#提示
read -p "请输入产品" pro
case $pro in
"A")
	echo "笔记本";;
"B")
	echo "hahh";;
"C")
	echo "112245";;
esac
#!/bin/bash
#提示
read -p "请输入评判" pj
case $pj in
[0-3])
	echo "不满意";;
[4-6])
	echo "满意";;
[7-9])
	echo "非常满意";;
esac

循环结构
for循环

for 变量名 in 列表 
do
语句
done

练习:输出1-10的数

#!/bin/bash
#循环
for i in 1 2 3 4 5 6 7 8 9 10
do
	echo $i
done

改进

seq start size max
size的值为1可以省略
start 开始点
size 间隔
max 结束点
#!/bin/bash
#循环
for i in 'seq 1 1 10'
do
	echo $i
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值