1. 新建工作目录
目录命名为班级加姓名的格式,如 1banz3
参考代码:
代码语言:shell复制mkdir 1banz3
# 切到 1banz3 目录:
cd 1banz3
2. 创建Shell脚本文件
代码语言:shell复制touch compute.sh
3. 编辑Shell脚本
代码语言:shell复制vi compute.sh
输入以下代码:
代码语言:shell复制#!/bin/bash
#(())
a=2
b=$((a**2)) #幂运算
echo $b
f=$((c=b 3,d=b-3,e=d*3))
echo $c $d $e $f
#bc
echo "2.3 5.8"|bc
echo "scale=3;8/3"|bc
echo "scale=3;var1=8;var1/3"|bc #scale指定小数位数
var2=3
echo "scale=3;var1=8;var1/$var2"|bc #引用Shell变量:用$
var3=$(echo "scale=3;var1=8;var1/$var2"|bc)
echo "var3=$var3" #打印var3的值
4. yum安装bc计算程序
代码语言:shell复制sudo yum install bc
提示做选择时按y然后按回车即可
输入命令bc按回车可以直接运行bc计算程序
代码语言:shell复制bc
启动bc程序后会进入交互式计算模式,例如,输入 1.1*3
按回车,会打出计算结果 3.3
bc的内置变量 scale
可以指定除法或取余运算的小数位数
例如:4/3的结果是1。
将scale赋值为3,再输入4/3,可以看到结果为1.333
另外,使用bc内定义的变量不需要$符号
退出bc程序:输入 quit
命令
5. 运行Shell脚本
代码语言:shell复制chmod x compute.sh
./compute.sh
参考运行结果
代码语言:text复制4
7 1 3 3
8.1
2.666
2.666
2.666
var3=2.666
6. 文件测试脚本
代码语言:shell复制touch test1.sh
输入以下代码:
代码语言:shell复制echo "判断当前工作目录下是否有hello.c文件:存在结果为0,否则为1"
[ -a hello.c ] # 条件测试语句,与 test -a hello.c 等价。注意参数用空格隔开
echo "结果是:$?" #使用$?查看上述条件测试运行的结果
if [ ! -f hello.c ]
then
echo "hello.c文件不存在,即将用touch命令新建hello.c文件"
touch hello.c
[ -a hello.c ]
echo "新建文件后再次判断的结果是:$?"
else
echo "hello.c文件已存在,可以用ll hello.c查看权限"
fi
- 条件测试的表达式写在一对方括号[]内,例如
[ -f hello.c ]
,或者采用test命令加参数的写法,例如test -f hello.c
,所以要注意:不同的运算符(方括号也算在内)和操作数用空格隔开。 - Shell编程中,条件测试结果为true,则返回退出状态为0,否则结果为false,并返回非0退出状态。
- 所以,编写Shell时,不能以C编程中0表示false,非0表示true的方式来理解。
!
是逻辑运算符的一种,可以放在任何表达式前面,表示逻辑非运算的结果。注意,使用逻辑非运算符左右用空格隔开。
运行脚本
代码语言:shell复制bash test1.sh
参考运行结果:
代码语言:text复制判断当前工作目录下是否有hello.c文件:存在结果为0,否则为1
结果是:1
hello.c文件不存在,即将用touch命令新建hello.c文件
新建文件后再次判断的结果是:0
可以再次运行脚本,看到第二种运行结果:
代码语言:text复制判断当前工作目录下是否有hello.c文件:存在结果为0,否则为1
结果是:0
hello.c文件已存在,可以用ll hello.c查看权限
7. if 选择结构
新建if.sh脚本
输入以下代码:
代码语言:shell复制#!/bin/bash
read -p "请输入你的分数:" Score
if [ "$Score" -ge 0 -a "$Score" -le 59 ];then
echo "不通过"
elif [ "$Score" -ge 60 -a "$Score" -le 79 ];then
echo "通过"
elif [ "$Score" -ge 80 -a "$Score" -le 100 ];then
echo "优秀"
else
echo "请输入一个0到100之间的数"
fi
- 条件测试中,整数的比较有专用的写法,例如
-eq
表示运算符前后两个整数值相等,-ne
表示运算符前后两个整数值不相等,而常用的=
,!=
运算符专用于比较字符串。 -a
是逻辑运算符中的逻辑与运算,类似的,-o
表示逻辑或。- 逻辑运算的优先级会低于比较运算,但可以用圆括号改变优先级顺序,需要注意的是,在Shell中,圆括号需要用反斜杠转义后使用。
运行if.sh脚本,参考运行结果:
代码语言:text复制请输入你的分数:60
通过
8. case选择结构
新建case.sh脚本
输入以下代码:
代码语言:shell复制#!/bin/bash
read -n 1 -p "请输入一个字符:" char
echo
case $char in
[a-z])
echo "小写字母"
;;
[A-Z])
echo "大写字母"
;;
[0-9])
echo "阿拉伯数字"
;;
*)
echo "其它符号"
esac
参考运行结果:
代码语言:text复制请输入一个字符:A
大写字母