目录
注:本文章基于unbuntu虚拟机实现,不同虚拟机可能略有差异
一、什么是shell
shell 是一种脚本语言 也是应用程序
脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)
常见的命令解释器:shell bash sh tcsh
**** 此处区分 解释型代码 命令型代码
解释型:运行代码需要解释器,运行效率低,开发效率高 如: .sh结尾的shell脚本 .py结尾的 python脚本
命令型:需要编译链接,直接计算机运行,运行效率高,开发效率低 如: .c .cpp
二、 shell脚本基本语法
2.1创建文件、运行代码
1、以 #! + 解释器 开头
Linux系统中,指令which bash可以查看当前使用的命令解释器位置
本机当前使用解释器为:/usr/bin/bash
2、echo(默认换行) / printf 打印到屏幕
3、脚本文件无需编译,直接运行
4、单行注释 #
2.2 shell脚本执行linux命令
如:执行ls命令
法一: $(ls)
法二: `ls`
避免s=ls 造成的命令和赋值冲突
#!/usr/bin/bash
a=$(ls)
b=`ls`
echo "a=$a"
echo "b=$b"
三、变量
(1)、变量分为:本地变量、环境变量、参数变量
(2)、变量无类型
如:a =100; C语言中认为a是一个整型,但是脚本中a可以是任意类型
(3)、任意变量可赋值(注意变量 与 值 之间无空格)
3.1本地变量
定义:自己写的变量
3.1.1获取变量的值
$ +变量名 获取变量的值
unset 清除变量名
" " 打印出变量的值
‘ ’ 按照原样输出
变量与值之间无空格(与C语言,C++区分)
示例:
#!/usr/bin/bash
a=100
str=hello
echo "a=$a"
echo "str=$str"
echo 'str=$str'
echo 'a=100'
#C语言中赋值时必须保证等号左右两边变量的类型相同
#shell中变量无类型之分,故此处可以赋值
a=$str
echo "a=$a"
输出结果为:
3.1.2从键盘获取变量的值
#!/usr/bin/bash
echo "input"
read line
echo "line=$line"
运行后键盘输入,read读取输入变量值, echo打印出值
3.2环境变量
$PATH 以冒号分隔,打印出命令的目录列表
$0 shell脚本的名字
$# 传递给脚本的参数个数
$$ shell脚本的进程号,用它生成一个唯一的临时文件
示例:
#!/usr/bin/bash
echo "$PATH"
echo "$$"
echo "$0"
3.3参数变量
$1 $2 $3........脚本程序的参数
\ 为转义字符 表示$失去获取变量值的功能
#!/usr/bin/bash
echo "$PATH"
echo "\$0=$0"
echo "\$$=$$"
echo "\$#=$#"
echo "\$1=$1"
echo "\$2=$2"
四、四则运算
#!/usr/bin/bash
a=12
#let "a+1" #直接+1
echo "a=$a"
a=`expr $a + 1` #使用命令+1
echo "a=$a"
expr 指令可以切换 加(+)减(-)乘(*)除(/)进行计算
五、条件判断 if语句
5.1句式结构
# if条件判断语句,通常以if开头,fi结尾。也可加入else或者elif进行多条件的判断
(1)、单分支语句 ---比较大小
if [条件表达式]then
语句1
fi(2)、 双分支if 语句
if [表达式]
语句1
else
语句2
fi(3)、 多支条件语句 ---判断成绩
if [表达式]then
语句1
elif [表达式]
then语句2
elif
语句2
fi
5.2 if常见的判断逻辑
(1)、字符串比较(左右两边可以为数字、字母、下划线)
= 相等
!= 不相等
-n 字符串不为空结果为真
-z 字符串为空结果为真
(2)、算术比较(左右两边必须是数字)
a -eq b 表达式相等为真
a -ne b 不相等为真
-gt a>b结果为真
-ge a≥b结果为真
-lt a<b结果为真
-le a≤b结果为真
(3)、文件条件测试
-r 文件可读为真
-d 目录文件为真
-f文件存在为真
示例1: 字符串比较
#!/usr/bin/bash
echo "input"
read str
if [ $str = 123 ]
then
echo "=="
else
echo "!="
fi
示例二:算术比较
#!/usr/bin/bash
echo "input"
read str
if [ $str -eq 123 ]
then
echo "=="
else
echo "!="
fi
示例三:找出大于0小于10的数
#!/usr/bin/bash
echo "input"
read str
if [ $str -gt 0 ] && [ $str -lt 10 ]
then
echo "0<$str<10"
fi
示例四:输出成绩等级
#!/usr/bin/bash
echo "input"
read score
if [ $score -lt 0 ] || [ $score -gt 100 ]
then
echo "成绩不合格"
exit 0
fi
if [ $score -gt 80 ]
then
echo "A"
elif [ $score -gt 70 ]
then
echo "B"
elif [ $score -gt 60 ]
then
echo "C"
else
echo "D"
fi
六、循环语句
6.1 for循环
6.1.2句式结构
for 变量 in 数值
do
输出语句
done
示例:
#!/usr/bin/bash
for i in abc hello 123
do
echo "i=$i"
done
输出: i=abc
i=hello
i=123
6.2 while循环
6.2.1句式结构
while [ ]
do
语句
done
示例:
打印出 1-9
#!/usr/bin/bash
i=1
while [ $i -lt 10 ]
do
echo "i=$i"
let "i+=1"
done
#!/usr/bin/bash
i=1
while [ : ] # :表示条件为真
do
echo "i=$i"
i=`expr $i + 1`
if [ $i -eq 10 ]
then
break
fi
done
6.3 until循环
6.3.1句式结构
until [ ]
do
语句
done