操作系统学习笔记(九)
2019-04-17 本文已影响0人
itczt
Shell
Shell是操作与用户交互的界面
Shell表现为通过控制台执行用户命令的方式。
Shell本身不执行命令,仅仅是组织和管理命令。
shell的脚本编程
- 脚本(script)通过类似程序的方式执行具有一定逻辑顺序的命令序列完成较复杂的功能和人机交互。
- 脚本程序保存在文本文件中;
- 脚本程序是shell命令语句的集合;
eg:
intall.shell
#!/bin/bash
#创建临时文件
sudo mkdir/usr/temp
#解压安装包到临时文件
sudo echo"正在解压文件"
sudo onzip -qd/usr/temp/HUSTLIBVC30.zip
sudo echo"解压完成"
#拷贝安装文件
sudo cp -rf/usr/temp/HUSTLIBV30/HUSTLIB/usr/lib
#使配置文件生效
sudo ldconfig
#删除临时文件
sudo echo "正在删除临时文件"
sudo rm -rf/usr/tmep
sudo echo " 删除临时文件成功"
sudo echo "安装完成请重启"
shell脚本编程
- shell脚本程序有shell环境解释执行;
- 执行shell脚本文件需要有可执行属性(X)
- chmod+xMyScript·sh
eg:输入y或输出yes,输入n或N输出no
#!/bin/bash
read -n | -p "Enther your choice:"answer
echo
case $answer in
Y|y)
echo yes;;
N|n)
echo no;;
*)
echo "please input Y or N"
运行结果
root @~/fan#./cc.sh
Enter your choice:y
yes
read命令
- read从键盘读入一行,把各个字段赋给相应变量
read -n | -p "Enter your choice:" answer
answer:指定的变量,可以随意定义。
-n:指定输入字符的个数。达到个数自动结束输入。
-p:给出提示信息。
- echo指向控制台输出字符串echo Yes.
格式:echo[-n]字符串
-n:输出字符串后不换行
字符串可加引号,也可以不加引号。
case expr in #expr为表达式,关键词in不要忘!
pattern1) #若expr与pattern1匹配,注意括号
commands1 #执行语句块commands1
;; #跳出case结构
pattern2) #若expr与pattern2匹配
commands2 #执行语句块commands2
;; #跳出case结构
... ... #可以有任意多个模式匹配
*) #若expr与上面的模式都不匹配
commands #执行语句块commands
;; #跳出case结构
esac #case语句必须以esac终止
eg:输入x和y两个整数,比较它们的大小
#!/bin/bash
#scriptame:ex4if.sh
echo -n "please input x,y:"
read x y
echo "x=$x,y=$y"
if((x>y));then
echo "x is larger than y"
else
echo "x is less than y"
fi
运行结果
please inout x,y;20,30
x=20,y=30
x is less tan y
语法结构
if expr1 #如果expr1为真(返回值为0)
then #那么
commands1 #执行语句块commands1
elif expr2 #若expr1不真,而expr2为真
then #那么
connands2 #执行语句块commands2
... ... #可以有多个elif语句
else #else语句最多只有一个
commands4 #执行语句块commands4
fi #if语句必须以单词fi终止
运行脚本程序的三个方法
方法一:直接运行(用缺省版本的shell运行脚本程序)
方法二:使用某个特定版本的shell执行脚本
$bash first -script
- 指定一个特定shell版本(此列是bash)来执行该脚本
- first -script 逐行执行脚本中的命令并依次输出结果。
- 当脚本文件中的命令依次执行完毕,读临时子shell也自动结束运行;返回到用户原来使用的shell状态。
方法三:在脚本文件首行指定shell
在脚本开头增加一行;
#!/bin/bash -#必须顶格,后接shell全路径
可从/etc/shell/获知所有shell及其绝对路径。