设为首页 收藏本站
查看: 1258|回复: 6

SHELL脚本基础讲解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-7-22 09:53:28 | 显示全部楼层 |阅读模式

1.Shell脚本概念

       1.定义:shell script 是利用shell的功能所写的一个“程序”,这个程序是使用纯文本文件,将一些shell的语法和命令写在里面,搭配成正则表达式、管道命令和数据流重定向等功能。以达到我们所想要的目的。

       2.范例



[Shell] 纯文本查看 复制代码
[iyunv@localhost ~]# vim 01.sh
#!/bin/bash
#a simple example !
#
echo "please input your name: "
read Name
echo "Hello , $Name !!!"

       解析:

       在shell脚本中,我们一般会把 #!/bin/bash 放在第一行,这样当我们未指明运行的shell时,系统会默认的以bash来运行。在shell中我们通常把#放在一行的开头作为该行的注释。echo 命令能够将后面的内容打印出来而read命令能够要求用户输入一个数值,而shell会默认的将该数值赋给变量Name,在下文我将进行详细的阐述。


2.变量的概念

       在上面的示例中我们提到了变量的概念,那变量到底是什么呢?变量实际上是指可利用的内存空间,它限制了数据存储的格式和数据的表示范围。在shell中变量主要有以下几种:

本地变量:只对当前shell进程有效。                定义方式: [set] VAR_Name=value      其中set可以省略。

局部变量:只在局部程序内有效。                    定义方式:  local VAR_Name=value

环境变量:对当前shell及其子shell有效。       定义方式:  export VAR_Name=value

       当然系统中还默认有许多环境变量,我们可以通过 env 在命令行界面下查看。而要查看当前shell中所有的变量,我们可以使用 set 命令。

位置变量:$0  $1  $2  ...

       $0             默认情况下表示当前的shell,如果在脚本中执行能够输出当前脚本名称。

       $1,$2...    表示位置变量,能够输出所在位置中变量的值

特殊变量:$?  $$  $#  $@  $* ...

       $?            表示当前环境中命令执行的返回状态

       $$            表示当前shell的进程ID

       $#            表示当前环境中位置变量的个数

       $@,$*      能够打印出当前环境中位置变量的内容

在shell环境中我们可以通过 unset 命令对定义的变量进行撤销。


3.变量的相关声明

       bash实际上是一种交互式的接口,同时也提供了相关的编程环境;bash提供的是一种弱类型的语言,它不强制区分变量类型,无论存储什么数据,默认均以字符格式存储。在使用变量的过程中我们不需要事先声明。用到时直接赋值即可。但是在一定的环境中我们也可以对其进行声明。在bash中我们通常使用declare命令,格式如下:



[Shell] 纯文本查看 复制代码
declare -i VAR_Name     声明一个整形变量
declare -a VAR_Name     声明一个数组
declare -x VAR_Name     声明一个环境变量
declare -r VAR_Name     将变量声明为只读(readonly)


4.变量的引用

       格式如下:



[Shell] 纯文本查看 复制代码
1
${VAR_Name}             $加上一个大括号,中间引用变量名

       有的时候我们需要在输入的语句中引用变量的值,这个时候我们为保证得到的是变量值通常在引用的时候加上双引号。在shell中,双引号引用被称为弱引用,可以实现变量值的正常替换,而单引号引用被称为强引用,引号的内容原样输出,在某些时候我们需要在脚本中引用某些命令的执行结果,这个时候我们会使用反引号。以上就是引号在shell脚本中的相关作用。希望大家在使用的过程中不要混淆。

       有的时候我们在脚本的编写过程会用到数组,但不是很常用。在这里我做一下简单的介绍:

[backcolor=white !important]
[Shell] 纯文本查看 复制代码
XX=(aa bb cc dd)            #定义一个属组XX
echo ${XX[2]}               #输出数组中下标为2的数组元素的值,这里为cc                  
echo ${XX[*]}               #将属组中所有的元素打印出来
echo ${XX[@]}               #效果和 echo ${xx[*]} 相同
echo ${!XX[@]}              #打印出数组中所有元素的下标
echo ${#XX[@]}              #打印属组中元素个数

5.shell脚本语法检查与调试
   可以通过bash进行,语法格式如下:
bash -n *.sh            #检查脚本中的语法错误(不真正执行脚本)
bash -x *.sh            #调试执行脚本



6.算术运算

   注意:shell不支持浮点数,计算结果中的浮点数默认的会被圆整为整数。

   算术运算的实现方式(有以下4种):

       $[expression]            C=$[$A+$B]

       $((expression))          C=$(($A-$B))

       let expression           let C=$A*$B

       expr expression          C=`expr $A / $B`

示例:声明2个变量Num1和Num2,用四种方式打印出他们之间的和。



[Shell] 纯文本查看 复制代码
#!/bin/bash
Num1=13
Num2=7
let C=$Num1+$Num2
echo "$Num1+$Num2=$[$Num1+$Num2]"
echo "$Num1+$Num2=$(($Num1+$Num2))"
echo "$Num1+$Num2=$C"
echo "$Num1+$Num2=`expr $Num1 + $Num2`"

7.条件测试与判断

               1.整数测试

                      expression [ 数值1 比较符号 数值2 ]

比较符号
含义
-gt
大于
-ge
大于或等于
-eq
等于
-lt
小于
-le
小于或等于
-ne
不等于

      2.字符测试

                       expression [ 数值1 比较符号 数值2 ]

比较符号
含义
>
大于
<
小于
==
等于
=~
模式匹配
-z $string
判断是否为空
-n $string
判断是否不空

              3.组合测试条件

条件
符号
命令连接
-a
&&
-o
||
!
!



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-7706-1-1.html 上篇帖子: shell脚本编程之选择控制结构 下篇帖子: shell 脚本之清除日志记录

尚未签到

发表于 2013-7-22 15:38:48 | 显示全部楼层
楼主发的是好帖、支持下、

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-23 18:50:39 | 显示全部楼层
我本非随便的人,但如果你想随便,那我就随你的便好啦!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-24 14:26:32 | 显示全部楼层
恋爱就是无数个饭局,结婚就是一个饭局。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-25 18:04:04 | 显示全部楼层
避孕的效果:不成功,便成“人”。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-26 12:54:17 | 显示全部楼层
男人偷腥时的智商仅次于爱因斯坦!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-27 05:53:23 | 显示全部楼层
如果没有毛片,中国的性教育简直就是一片空白!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表