【博学谷IT技术支持】
一、shell简介
shell
是一种编写脚本程序的语言,常用于linux
,shell
是解释型语言,相对于其他的语言更加好学,它的语法和结构也比较简单- 通过编写脚本,能显著的提高开发的效率
二、shell的基础知识
每个sh
文件都有这个开头,是指此脚本使用/bin/bash
来解释执行
#!/bin/bash
字符型数据
这里注意以下几点,分别是
- 变量的声明方式
- 一般建议使用双引号,变量和值左右之间不能有空格
- 这里输出使用
echo
输出变量需要在变量前加$
- 输出单个变量
str1="123"
echo $str1 # 123
- 输出多个变量
str2="456"
echo "str1=$str1, str2=$str2" # str1=123, str2=456
注意:这里也可以使用${}
,但是建议使用上边的,比较简化
数组型数据
- 素组的产生与使用凡是,如何获取数组的长度
@ 和* 可以获取数组中的所有元素
arr1=(1,2,3)
echo ${arr1[0]} ${arr1[1]} ${arr1[2]} # 1 2 3
echo ${arr1[*]}
echo ${arr1[@]}
# 截取字符串的长度
# 截取从第2个到第4个字符串
str3="你好我好大家好"
echo ${str3:2:2} # 我好
# 获取字符串的长度
echo ${#str3} # 7
运算
- shell的运算表达式比较麻烦,有使用expr表达式的,也有用
$(())
也有用$[]
。这里推荐使用$[]
,原因是它省事 - 注意一点的是乘法需要在
*
号前加\
a=1
b=2
echo `expr $a + $b` # 3
echo `expr $a \* $b` # 2
echo "========"
echo $((a+b)) # 3
echo "========"
echo $[a+b] # 3
流程控制
判断语句
这里是判断语句使用的运算法
-eq
-ne
是对两个数进行判断,前者判断相同(=)
,后者判断不同(!=)
,均返回true
-gt
-ge
分别是大于号(>)
和大于等于号(>=)
, 结果是返回true
-lt
-le
分别是小于号(<)
和小于等于号(<=)
, 结果是返回true-n SRING
判断字符串不为0
-z
判断字符串长度为0
文件类型的判断
-r
-w
-x
分别是文件存在可读,文件存在可写-e
-f
-d
分别是文件存在,文件存在且是普通文件,文件存在且是目录-h
存在且是符号链接
if 语句
注意:if
是有结束标志fi
的
if [ -n "123" ]; then
echo "123字符串的长度不为0"
fi
if [ -z "" ]; then
echo "空字符串的长度为0"
fi
addressUrl=/export/shell/
if [ -e $addressUrl ]; then
echo "存在该文件夹"
else
echo "不存在该文件夹"
fi
if [ -f $addressUrl ]; then
echo "该文件存在是普通文件"
else
echo "该文件存在不是普通文件"
fi
if [ -d $addressUrl ]; then
echo "文件存在且是目录"
else
echo "文件存在且不是目录"
fi
if [ -e $addressUrl ]; then
echo "存在该文件夹"
elif [ ! -e $addressUrl ]; then
echo "不存在该文件夹"
if
for循环
- for也可以用来读取数组
for i in 1 2 3 4
do
echo "这是第$i个数字"
done
for((i=0; i< 10; i++))
do
echo "展示第$i个循环数字"
done
while 循环
- 这里求
10
的自减总值为多少 使用let
可以使用shell
中的一些高级语法
num=10
total=0
while [ $num -lt 1]
do
total=$[total+num]
echo "total=$total"
let num--
done
case语法
echo "请选择您的1-3的数字:"
read -p "您输入的数字为:" num
case $num in
1) echo "您输入的是$num"
;;
2) echo "您输入的是$num"
;;
3) echo "您输入的是$num"
;;
*) echo "您的输入有误"
;;
esac
函数
传递参数的特殊变量
- $# 命令行参数的个数
- $n n从1开始,类推代表第n个参数
- $0 当前程序的名称
- $? 前一个命令或者函数的返回码
function funcDemo() {
echo "这个方法的名字为$0"
echo "参数1为$1,参数2为$2,参数3为$3"
echo "当前总共$#个参数"
}
getName 1 2 3
echo "前一个命令的返回码为$?"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6QupHHJp-1662782536003)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f87241a1d867405b8f4b630bec9c8181~tplv-k3u1fbpfcp-watermark.image?)]
返回值的范围是0-255
- 0是命令运行成功 1是通知未知错误 2是误用shell命令
- 126是命令不可执行 127是没有找到命令 128是无效退出参数
- 128+x是linux信号x的严重错误
- 255是退出状态码越界
select
echo "少男,少女,你想要什么斧头"
PS3="你要金斧头还是银斧头: "
select i in "金斧头" "银斧头" "铜斧头"
do
break;
done
echo "少男,少女 这是你的$i"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AEQwRQ1F-1662782536005)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4c60cb3433c24fc1966ce94235206849~tplv-k3u1fbpfcp-watermark.image?)]
selct与case结合
echo "少男,少女,你想要什么斧头"
PS3="你要金斧头还是银斧头: "
select i in "金斧头" "银斧头" "铜斧头"
do
case $i in
"金斧头") echo "这是黄金做的啊, 你可以卖掉了";;
"银斧头") echo "这是你的银斧头,你想做什么呢";;
"铜斧头") echo "这是你的铜斧头,只能劈柴哦";;
esac
break;
done
echo "少男,少女 这是你的$i"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-siZNFrOF-1662782536006)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c43ab77d148f41019e08b450a3407272~tplv-k3u1fbpfcp-watermark.image?)]
标签:文件,shell,num,博学,echo,addressUrl,斧头,超强 From: https://www.cnblogs.com/neilniu/p/17448192.html