1、shell介绍
Shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出,简单来说Shell就是一个用户跟操作系统之间的一个命令解释器。
Shell脚本名称命名一般为英文、大写、小写,后缀以.sh 结尾
shell 脚本 变量不能以数字、特殊符号开头,不能使用特殊符号,可以用【_】下划线,不能使用关键字。
2、shell命令操作
2.1 简单示例
[root@dgw-machine dgw]# echo "echo hello world" > test.sh
[root@dgw-machine dgw]# chmod +x test.sh
[root@dgw-machine dgw]# ./test.sh
hello world
2.2 查看是否是内嵌命令
通过type可以查看咱们平时使用的命令是否是【shell】内嵌命令,如果是代表执行效率就高。
[root@dgw-machine dgw]# type cd
cd 是 shell 内嵌
[root@dgw-machine dgw]# type echo
echo 是 shell 内嵌
[root@dgw-machine dgw]# type ps
ps 是 /usr/bin/ps
[root@dgw-machine dgw]# type ll
ll 是 `ls -l --color=auto' 的别名
[root@dgw-machine dgw]# type crond
crond 是 /usr/sbin/crond
2.2 识别内嵌shell命令
#!/bin/sh
Shell 脚本的第一行要写 #!/bin/sh,它指明了脚本中命令的解释器,否则在直接运行脚本时,将不能识别内嵌命令。
2.3 运行.sh文件的方法
详解博文:Linux系统中运行.sh文件的几种方法_linux运行sh文件命令_IT之一小佬的博客-CSDN博客
2.4 创建变量
[root@dgw-machine dgw]# x = 111
-bash: x: 未找到命令
[root@dgw-machine dgw]# x=111
[root@dgw-machine dgw]# y=222
[root@dgw-machine dgw]# expr $x "+" $y
333
2.5 遍历多个值
【do】开始【done】结束。
#!/bin/sh
for info in AAA BBB CCC DDD
do
echo "I'm ${info} !"
done
注意:花括号代表变量作用域,如果是连续字符建议使用,不是连续字符用不用都行
2.6 数组
数组操作就一定要加上作用域【{}】,使用方法与传统语法类似,下标都是从【0】开始。
#!/bin/sh
array=("AAA" "BBB" "CCC")
echo ${array[0]}
echo ${array[2]}
2.7 输出数组信息
#!/bin/sh
array=("AAA" "BBB" "CCC")
echo ${array[@]}
2.8 获取数组长度
#!/bin/sh
array=("AAA" "BBB" "CCC")
echo ${#array[@]}
如果加上描述,建议用上双引号,与显示信息不同,这里有一个【#】符号。
#!/bin/sh
array=("AAA" "BBB" "CCC")
echo "数组长度:" ${#array[@]}
echo 数组长度: ${#array[@]}
2.9 数组范围查询
#!/bin/sh
array=("AAA" "BBB" "CCC" "DDD" "EEE")
echo ${array[@]:1:3}
2.10 传递参数
#!/bin/sh
echo "shell 在执行命令过程中传递参数"
echo "执行人:$1"
echo "第一个参数为:$2"
echo "第二个参数为:$3"
读取变量是从【0】开始,但是由于第一个命令要执行【./脚本】,故而从【1】进行获取。
2.11 运算符
3、流程控制语句
3.1 分支语句
关键字:if、elif、else、fi
#!/bin/sh
a=10
b=15
if [ $a == $b ]; then echo "a 等于 b"
elif [ $a -gt $b ]; then echo "a 大于 b"
elif [ $a -lt $b ]; then echo "a 小于 b"
else echo "没有符合的条件"
fi
3.2 循环语句
3.2.1 for循环
#!/bin/sh
for((i=1;i<10;i++));
do
echo $(expr $i "*" $i "+" 1);
done
3.2.2 while循环
这儿的let表示 "i++" 的自增,不用 $
#!/bin/sh
i=1
while(( $i<=5 ))
do
echo $i
let "i++"
done
3.2.3 until循环
until循环执行一系列命令条件为false时继续,直到条件为true时停止。
#!/bin/sh
i=0
until [ ! ${i} -lt 10 ]
do
echo ${i}
let "i++"
done
3.2.4 case语句
#!/bin/sh
echo "请输入1~3之间的数字,您输入的数字为:"
read Num
case $Num in
1) echo "您选择了 1";;
2) echo "您选择了 2";;
3) echo "您选择了 3";;
*) echo "您没有按要求输入指定范围的数值!";;
esac
3.2.5 循环控制语句break
#!/bin/sh
i=1
while(( $i<=5 ))
do
if [ $i -gt 3 ]; then
echo "循环提前受条件限制终止"
break
fi
echo $i
let "i++"
done
3.2.6 循环控制语句continue
#!/bin/sh
i=1
while(( $i<=5 ))
do
if [ $i == 3 ]; then
echo "循环提前受条件限制终止本次循环"
let "i++"
continue
fi
echo $i
let "i++"
done
4、函数
函数语法结构如下:
[ function ] funname [()]
{
action;
[return int;]
}
#!/bin/sh
demoFunc(){
echo "This is my first shell function!"
}
echo "函数开始执行"
demoFunc
echo "函数执行完毕"