【学神】shell脚本的基本使用方法
时间: 16:41:16
&&&& 阅读:74
&&&& 评论:
&&&& 收藏:0
标签:本节所讲内容:1、shell 基本语法2、变量3、表达式4、判断语句5、if表达式&一、什么叫shell【例】先看一个简单的shell程序[&test]#&vim&example01.sh&写入以下内容
#!/bin/bash
#This&is&to&show&what&a&example&looks&like.
echo&"Our&first&example"
echo&This&inserts&an&empty&line&in&output.
echo&"We&are¤tly&in&the&following&directory."
echo&"This&directory&contains&the&following&files"
[&test]#&chmod&+x&example01.sh&
[&test]#&./example01.sh&
Our&first&example
We&are¤tly&in&the&following&directory.
/root/test
This&directory&contains&the&following&files
example01.shshell就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了。打个比方,如果把计算机硬件比作一个人的躯体,而系统内核则是人的大脑,至于shell,把它比作人的五官似乎更加贴切些。回到计算机上来,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。1.1& shell编程编程语言:&&&&&&&& 1.机器语言&&&&&&&& 2.汇编语言&&&&&&&& 3.高级语言&&&&&&&&&&&&&&&&&& (1)静态语言Dynamically Typed Language:编译型语言& c& c++& java&&&&&&&&&&&&&&&&&& (2)动态语言Statically Typed Language:解释型语言& php& shell& python&& perl&&&&&&&& 编译器:(解释器)& 将人类理解的语言翻译成机器理解的语言弱类型:变量随时用随时声明强类型:变量在使用前,必须事先声明其中shell是弱类型的编程语言!/bin/bash& !跟shell命令的完全路径。作用:显示后期命令以哪种shell来执行这些命令。如不指shell,以当前shell作为执行的shell。[&test]#&ll&/bin/sh&&&&&&查看/bin/sh的软连接
&lrwxrwxrwx.&1&root&root&4&Dec&18&&2012&/bin/sh&-&&bash&以shell中以#开始头表示,整个行就被当作一个注释。执行时被忽略。shell程序一般以.sh结尾,当然主要是看是否为执行,然后看里面有没有#!&1.2 总结§创建shell程序的步骤:§ 第一步:创建一个包含命令和控制结构的shell文件。§ 第二步:修改这个文件的权限使它可以执行。使用chmod u+x§ 第三步:执行方法1:./example01.sh
方法2:&使用绝对路径&&[&test]#&/root/test/example01.sh
方法3:[&test]#&bash&example01.sh
方法4:[&test]#source/sh&example01.sh&注:example01.sh可以不用x权限&二、shell变量及运用1 shell变量变量是shell 传递数据的一种方法。变量是用来代表每个值的符号名。例: x=3& Shell 有两类变量:临时变量和永久变量。1.1临时变量:是shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。1.2永久变量:是环境变量,其值不随shell 脚本的执行结束而消失。【例】$PATH&&& [&test]#&echo&$PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin
#用作运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找。1.3用户定义变量:由字母或下划线打头,不允许数字开头,后面由字母、数字或下划线组成,并且大小写字母意义不同。变量名长度没有限制。使用变量值时,要在变量名前加上前缀“$”。例如:1VAR 是非法变量。&2 主要赋值类型2.1 变量赋值 赋值号“=”两边应没有空格。【例】 用“=”对变量赋值[&test]#&A=aaa
[&test]#&A&=&aaa
bash:&A:&command¬&found&2.2将一个命令的执行结果赋给变量[&test]#&A=`date`
[&test]#&echo&$A
Sat&Feb&7&20:54:26&CST&2015【例】& 用“=”对命令赋值[&test]#&B=$(ls&-l)
[&test]#&echo&$B
[&test]#&A=$B
[&test]#&echo&$A2.3可以利用变量和其它字符组成一个新的字符串[&test]#&MYDIR=/home/mk
[&test]#&echo&$MYDIR/zhangsan
/home/mk/zhangsan
[&test]#&DAY=mon
[&test]#&echo&Today&is&$DAYday
[&test]#&echo&Today&is&$DAY&day
Today&is&mon&day
[&test]#&echo&Today&is&${DAY}day
Today&is&monday2.4 给变量赋值多个单词[&test]#&NAME="mike&Ron"
[&test]#&echo&$NAME
[&test]#&NAME=‘shen&mk‘
[&test]#&echo&$NAME
shen&mk【例】& 赋值时“”和’’的区别[&test]#&NAME="mike&Ron&$NAME"
[&test]#&echo&$NAME
mike&Ron&shen&mk[&test]#&NAME=‘mike&Ron&$NAME‘&
[&test]#&echo&$NAME
mike&Ron&$NAME总结:单引号:之间的内容原封不动地指定给了变量。双引号:特殊符号的含义保留。【例】& 变量与符号的综合演示[&shell]#&a=192.168.1.63
[&shell]#&b=‘192.168.1.63‘
[&shell]#&c="192.168.1.63"
[&shell]#&echo&"a=$a"
&a=192.168.1.63
[&shell]#&echo&‘b=$b‘
[&shell]#&echo&"c=${c}"&&c=${c}等同c=$c
c=192.168.1.63&2.5 把命令当作变量进行定义[&shell]#&wen=`date&+%F`&&利用反引号进行定义
[&shell]#&echo&$wen
[&shell]#&wen=$(date)&&&&&利用小括号加$进行定义
[&shell]#&echo&$wen
Sun&Feb&15&12:42:30&CST&20153 对变量的管理3.1列出所有的变量set 命令,例:[&test]#&set&|&grep&DAY
DAY=mon3.2删除变量[&test]#&echo&$NAME
mike&Ron&$NAME
[&test]#&unset&NAME
[&test]#&echo&$NAME4位置变量和特殊变量4.1 位置变量Shell解释执行用户的命令时,将命令行的第一个字作为命令名,而其它字作为参数。由出现在命令行上的位置确定的参数称为位置参数。& 使用$N 来表示$0& 获取当前执行shell脚本的文件文件名,包括脚本路径$n& 获取当前脚本的第n个参数 n=0,1,2.....n 当n大于9时 用{n}表示。【例】快速生成$1-$9方法一:[&shell]#&seq&9|sed&‘s#[0-9]#$g‘&nshseq&9生成1-9之间的数,&为前面需要替换的字符
$9方法二:[&shell]#&seq&-s&"&$"&1&9|sed&‘s#1#$1#‘&n.sh&-s为指定分隔符后面的替换为seq&-s&"&$"&1&9生成的第一个数为没$符的所以应替换
$1&$2&$3&$4&$5&$6&$7&$8&$9&
&[&shell]#&sed&-i&‘s@&&@&‘&n.sh&&
执行:[&shell]#&sh&n.sh&`seq&-s&""&9`&&可快速赋值&
1&2&3&4&5&6&7&8&94.2 特殊变量有些变量是一开始执行Script脚本时就会设定,且不能被修改,但我们不叫它只读的系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,以下是一些等殊变量:$*&&& 这个程序的所有参数$#&&& 这个程序的参数个数$$&& 这个程序的PID$!& 执行上一个后台程序的PID$?& 执行上一个指令的返回值【例】 [&shell]#&cat&n.sh&
echo&$1&$2&$3&$4&$5&$6&$7&$8&$9
echo&$*&:&$#&:&$@&
执行结果:[&shell]#&sh&n.sh&`seq&9`
1&2&3&4&5&6&7&8&9
1&2&3&4&5&6&7&8&9&:&9&:&1&2&3&4&5&6&7&8&9【例】分别取出路径和文件名分析:利用$0得到当前执行的路径 分别进行输出脚本:[&shell]#&cat&0.sh&
dirname&$0
basename&$0
执行结果:[&shell]#&sh&/shell/0.sh&
/shell/0.sh&&&&&&&&&&&&&&&&&&&&&&&执行的全路径
/shell&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&执行的目录&&
0.sh&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&执行的文件名&【例】位置变量在服务启动与停止中的应用[&shell]#&vim&/etc/init.d/vsftpd&
case&"$1"&in&&&&&&&&&&&&&&&&&&相当于执行/etc/init.d/vsftpd&&$1
&&&&&&&&start&&&&&&&&&&&&&&&&当选择start时&调用start函数来启动服务
&&&&&&&&;;&&
&&&&&&&&stop&&&&&&&&&&&&&&&&当选择stop时&调用stop函数来停止服务
&&&&&&&&;;&&&
&&restart|reload)&&&&&&&&&&&&&当选择restart或者reload时&先停止服务&在启动服务
&&&&&&&&stop&&&&&&&&&&&&&&&
&&&&&&&&start&&&&&&&&&&&&&
&&&&&&&&RETVAL=$?
&&&&&&&&;;&&
echo&$"Usage:&$0&{start|stop|restart|try-restart|force-reload|status}"&&当输入的$1不存在时利用$0&来打印当前的执行脚本的方法补充:关于$?返回值的主要含义$0运行成功$2权限被拒绝$1--$125运行失败,命令错误或者参数错误$126 找到命令,但是不能执行$127未找到改命令$128命令被系统强制结束&5小综合实例5.1变量在shell中的使用[&test]#&cat&z1.sh&
#!/bin/bash&&&写入如下
var1="abcd&efg"
echo&$var1
echo&"The&value&of&var2&is&$var2"
echo&$HOME
echo&$PATH
执行结果:
[&test]#&./z1.sh&
The&value&of&var2&is&1234
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin
/root/test5.2 特殊变量的测试[&test]#&cat&z.sh&
#!/bin/bash&&&写入如下
echo&"$*&&&&&&&&&&&&&&&&表示这个程序的所有参数&"
echo&"$#&&&&&&&&&&&&&&&&表示这个程序的参数个数"
touch&/tmp/a.txt
echo&"$$&&&&&&&&&&&&&&&&表程序的进程ID&"
touch&/tmp/b.txt&&
echo&"$!&&&&&&&&&&&&&&&&&执行上一个后台指令的PID"
echo&"$$&&&&&&&&&&&&&&&&表程序的进程ID&"
执行结果:
[&test]#&./z.sh&aaa&bbb&ccc
aaa&bbb&ccc&&&&&&&&&&&&&表示这个程序的所有参数&
3&&&&&&&&&&&&&&&&&&&&&&&表示这个程序的参数个数
3899&&&&&&&&&&&&&&&&&&&表程序的进程ID&
3901&&&&&&&&&&&&&&&&&&&执行上一个后台指令的PID
3899&&&&&&&&&&&&&&&&&&&表程序的进程ID6 变量的数值计算常用的命令:(())6.1 (())用于执行简单的整数运算& 格式:$((算数运算符))6.2 常用的算数运算符&运算符意义++ ----递增及递减,可前置也可以后置+ -- ! ~ 一元运算的正负号 逻辑与取反+ -- * /& %加减乘除与余数&&=& &&=比较大小符号==& !=相等 不相等&&&&&向左位移 向右位移& ^ |位的与 位的异或 位的或&& || 逻辑与 逻辑或?:条件判断&【例】三种简单的赋值运算[&shell]#&((a=1+2**3-4%3))&&**3为2的3次方
[&shell]#&echo&$a&&&&&&&&&
[&shell]#&b=$((1+2**3-4%3))&&
[&shell]#&echo&$b
[&shell]#&echo&$((1+2**3-4%3))&省去了定义一个变量
8&&【例】递增 递减的应用[&shell]#&echo&$((a+=1))
[&shell]#&echo&$((a++))&&&&&等同于a+=1
[&shell]#&echo&$((a--))&&&
[&shell]#&echo&$a&&&&&&&&&&&&a++或a--为先赋值&再a加1或a减1
[&shell]#&echo&$((--a))
[&shell]#&echo&$a&&&&&&&--a或++a为先a加1或a减1&再进行a的赋值
9【例】 比较大小 [&shell]#&echo&$((1&2))&&&
[&shell]#&echo&$((1&=2))&&真为1&假为0&
1【例】1到100所有整数和[&shell]#&echo&$((100*(1+100)/2))
5050【例】 写一个简单四则运算的脚本[&shell]#&cat&operation.sh
echo&"a-b=$(($a-$b))"
echo&"a+b=$(($a+$b))"
echo&"a*b=$(($a*$b))"
echo&"a/b=$(($a/$b))"
echo&"a**b=$(($a**$b))"
echo&"a%b=$(($a%$b))"执行结果:[&shell]#&sh&operation.sh&
a%b=0&升级后的脚本[&shell]#&cat&operation.sh&
echo&"a-b=$(($a-$b))"
echo&"a+b=$(($a+$b))"
echo&"a*b=$(($a*$b))"
echo&"a/b=$(($a/$b))"
echo&"a**b=$(($a**$b))"
echo&"a%b=$(($a%$b))"或者[&shell]#&cat&operation.sh&
read&-p&"enter&a:"&a
read&-p&"enter&b:"&b
echo&"a-b=$(($a-$b))"
echo&"a+b=$(($a+$b))"
echo&"a*b=$(($a*$b))"
echo&"a/b=$(($a/$b))"
echo&"a**b=$(($a**$b))"
echo&"a%b=$(($a%$b))"【例】写一个简单的计算器,并且有判断功能[&shell]#&cat&operation.sh&
function&Enternum(){
&&read&-p&"Please&enter&the&first&number:"&a
&&read&-p&"Please&enter&the&second&number:"&b
&&&&&&&&Judgenum
function&Enterchar(){
&&read&-p&"Please&enter&the&transport&operator:"&c
&&echo&"****************"
&&Judgechar
function&Judgenum(){
&&if&[[&$a&=~&^[0-9]+$&&&&$b&=~&^[0-9]+$&]];&then&&&注意=~两边的空格&
&&&&&&&&Enterchar&
&&&&&&&&else
&&&&&&&&echo&"Digital&input&errors,&please&reenter&num"
&&&&&&&&Enternum
&&&&&&&&fi
function&Judgechar(){
&&&&&&&&if&[[&$c&=~&"-"|"+"|"*"|"/"|"%"&]];then
&&&&&&&&echo&$(($a$c$b))
&&&&&&&&else
&&&&&&&&echo&"Digital&input&errors,&please&reenter&char"
&&&&&&&&&Enterchar&
&&&&&&&&fi
while&true
do&Enternum
Done&三、Read命令1 定义Read作用从键盘读入数据,赋给变量【例】 对read的实验& #以空格为赋值分隔符&[&test]#&read&a&b&c
1&32&3&&&&
[&test]#&echo&$a&$b&$c
[&test]#&echo&$a
1【例】在shell中使用read命令:[&test]#&cat&read.sh&
#!/bin/bash&&&写入如下
echo&"input&first&second&third&:"
read&&first&second&third
echo&"the&first¶meter&is&$first"
echo&"the&second¶meter&is&&$second"
echo&"the&third¶meter&is&$third"测试:[&test]#&./read.sh&
input&first&second&third&:
the&first¶meter&is&aa
the&second¶meter&is&&11
the&third¶meter&is&332参数用法2.1& read answer&&& 从标准输入读取一行并赋值给变量answer2.2& read first last&&&&&&&&& 从标准输入读取一行,直至遇到第一个空白符或换行符。把用户键入的第一个词存到变量first中,把该行的剩余部分保存到变量last中2.3& read -a arrayname&&&&&&&&&&&& 读入一组词,依次赋值给数组arrayname③2.4& read -e&&&&&&&&& 在交互式shell命令行中启用编辑器。2.5& read -p prompt&&&&&&& 打印提示符,等待输入,并将输入赋值给REPLY变量③2.6& read -r line&&&&&&&&&&&&& 允许输入包含反斜杠③&四、expr 命令作用:Shell变量的算术运算:1 expr命令:对整数型变量进行算术运算语法: expr& 表达式&&& #注意 运算符之间要有空格[&test]#&expr&3&+&5
[&test]#&var1=8
[&test]#&var2=2
[&test]#&exp
expand&&&&&&&exportfs&&&&&expresskeys&&
export&&&&&&&expr&&&&&&&&&
[&test]#&expr&$var1&-&5
[&test]#&expr&$var1&/&$var2
[&test]#&expr&$var1&*&$var2
expr:&syntax&error
[&test]#&expr&$var1&\*&$var2
162 expr 程序的例子[&test]#&cat&expr.sh&&
#!&/bin/sh&&
&value1=`expr&$a&+&$b&+&$c`
&echo&"The&value&of&value1&is&$value1"
&value2=`expr&$c&/&$b`
&echo&"The&value&of&value2&is&$value2"
&value3=`expr&$c&\*&$b`&&&整除
&echo&"The&value&of&value3&is&$value3"
&value4=`expr&$a&+&$c&/&$b`
&echo&"The&value&of&value4&is&$value4"测试:[&test]#&./expr.sh&
The&value&of&value1&is&60
The&value&of&value2&is&1
The&value&of&value3&is&600
The&value&of&value4&is&113 复杂的运算[&test]#&var4=8
[&test]#&expr&`expr&5&+&11`&/&$var4
2【例】[&test]#&var1=8
[&test]#&var2=2
[&test]#&var4=`expr&$var1&/&$var2`
[&test]#&echo&$var4
4【例】 expr查找格式的应用 [&shell]#&expr&"test.pub"&:&".*.pub"&&&echo&1&||&echo&0&&
8&&&&&&&&&&&&&&&&&&&&&&&8&为test.pub
1&&&&&&&&&&&&&&&&&&&&&&左边为真则打印1
[&shell]#&expr&"test.pu1b"&:&".*.pub"&&&echo&1&||&echo&0
0&&&&&&&&&&&&&&&&&&&&&&左边为假则打印0&【例】用expr判断是否为整数 [root@hpc&shell]#&cat&judge_int.sh&
read&-p&"input&int:&"&a
expr&$a&+&0&&&/dev/null&&&&&&&&&&&&&&&&&&&&&将所有执行信息重定向到null中
[&$?&-eq&0&]&&&&echo&"int"&||&echo&"input&erro"#根据expr执行的返回值来判断是否为整数&学神-IT-教育51cto技术交流群:&&快来上我们公开课吧!& & & & 学神MK老师:& & & & 学神ZY老师:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 学神-IT-教育学神-IT-1508班-公瑾同学整理提供本文出自 “” 博客,请务必保留此出处标签:原文:http://xuegodlinux./9989
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!播放列表加载中...
正在载入...
分享视频:
嵌入代码:
拍下二维码,随时随地看视频
传奇变量基础课 什么是变量及传奇实用脚本(跳转脚...
上 传 者:
内容介绍:
传奇变量基础课 什么是变量及传奇实用脚本(跳转脚本的编写方法)
我来说点啥
版权所有 CopyRight
| 京网文[0号 |
| 京公网安备:
互联网药品信息服务资格证:(京)-非经营性- | 广播电视节目制作经营许可证:(京)字第403号
在线人数:
src="///img/blank.png" data-src=""/>
src="///img/blank.png" data-src=""/>
没有数据!
{upload_level_name}
粉丝 {fans_count}
{video_count}
{description}