Shell脚本基础

来源:互联网 发布:windows资源管理器解锁 编辑:程序博客网 时间:2024/06/08 19:05

Shell是什么?

Shell是一种程序设计语言,作为命令语言,他交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支,

在排序算法中,Shell是希尔排序的名称

基本上shell分为两大类:

  1. 图形界面shell(GUI shell)
    例如:应用最为广泛的windows系统,还有人们熟知的linux shell
  2. 命令行式的shell(CLI shell)
    例如:bash/sh/unix

传统意义上讲的shell指的是命令行式的shell.shell是操作系统外面的一层.shell管理你与操作系统之间的交互.

文字操作系统与外部最主要的接口就叫做shell.shell是操作系统最外层的一面.shell管理操作系统的交互:等待你输入,向操作系统解释你的输入,然后处理各种各样的操作系统的输出结果.

shell提供两种通讯额方式,一种交互式,一种非交互式shell script(非交互),shell script是放在文件中的一串shell和操作系统的命令,他们可以被重复使用.

本质上shell script是命令行命令简单的组合到一个文件里面

Shell基本是由一个命令解释器,类似DOS下的command.他接收用户的命令,然后调用相应的应用程序,较为通用的shell标准的sh和csh

交互式模式十九是shell等待你的输入,并且执行你提交的命令.这种模式被称作交互式的因为shell与用户进行交互.这种模式也是大多数用户非常熟悉的:登录,执行一些命令,签退.当你签退shell也终止了.

shell也可以运行在另一种模式:非交互的模式.在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行他们.当他读到文件的末尾,shell也就终止了.

shell标\脚本的作用

可以批处理,自动化完成一系列维护任务,大大减轻管理员的负担.

shell是以个由c语言编写的程序,他是用户使用linux的桥梁.shell即使一种命令语言,又是一种程序设计语言
shell是指的一种应用程序,这个程序提供了一个界面,用户通过这个界面访问操作系统的内核的服务.

linux的shell种类很多,我们主要关注的是bash
由于易用和免费,bash在日常工作中被广泛使用
#!告诉系统其后面的路径指定的程序即使解释此脚本的文件shell程序#!/bin/bash.

第一个shell脚本

打开编辑器,新建一个test.sh,扩展名sh的表示shell.扩展名不影响脚本的执行.
#!/bin/bash
echo “hello world!”
这里我们需要注意#!是一个约定的标记,他告诉系统这个脚本需要用什么解释器来执行.echo用于向窗口输出文本.
chmod +x ./test.sh #让脚本有执行的权限
./test.sh #执行脚本
在linux里注意./当前目录

shell变量

在定义变量的时候,变量名不需要加$
your_name=”rnoob.com”
注意变量名和等号之间不能有空格除了显示赋值,还可以用语句给变量赋值,如:
for file in “ls/etc”
以上语句将/etc下的目录名循环出来

使用变量

使用变量名需要在变量名前面加name=lihuaechoname
echo ${name}
变量名外面的花括号是可选的,加不加都是可以的,,加花括号帮助解释器识别变量的边界

已经定义的变量可以被重新定义(但是我们需要注意的是在定义变量的时候是不需要加$符号,使用的时候需要添加

只读变量

使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变.
#!/bin/bash
myurl=”http://www.w3c.cc”
readonly myurl
myurl=”http://www.runoob.com”
这会报错

删除变量

我们使用unset var_name

变量被删除后不能再次使用,unset命令不能删除只读变量

变量类型

  1. 局部变量局部变量在脚本或者命令中定义,仅在当前shell实例中有效,其他shell,其他shell启动的程序不能访问局部变量
  2. 环境变量所有程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行.必要的时候shell脚本也可以定义环境变量.
  3. **shell变量**shell变量是由shell程序设置的特殊变量,shell变量中有一部分是环境变量,有一部分是局部变量这些变量保证了shell的正常运行.

shell字符串

字符串是shell编程中最常用到最有用的数据类型,字符串可以用单引号,也可以用双引号,,单双引号的区别和php类似.
str=’this is string’
单引号字符串的限制:

  • 单引号里的任何字符串都会原样的输出,单引号中的变量是无效的.

  • 单引号字符串中不能出现单引号(对单引号使用转义字符也不行)

双引号的优点

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

拼接字符串
your_name=”qinjx”
greeting=”hello, “yourname!greeting1=hello,{your_name} !”
echo greetinggreeting_1

获取字符串长度
string=”abcd”
echo {#string}  
截取字符串  
    string=”hello”  
    echo
{string:1:3}#输出el
查找子字符串
string=”runoob is a great company”
echo expr index "$string" is # 输出 8
这里需要注意:以上脚本”`”是反引号,而不是单引号.不要看错了

shell数组

bash支持意味数组(不支持多维数组),并且没有限定数组的大小.类似C语言,数组元素的下表有0开始编号,获取数组中的元素要利用下表,下表可以是整数或者算式表达式,其值应该大于或等于0

定义数组

在shell中,用括号来表示数组,数组元素用空格符号来隔开.定义数组的形式为:
数组名=(值1 值2 值3….值n)
也可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
可以不使用连续的下标,而且下标范围没有限时.

读取数组

读取数组的一般格式
${数组名[下标]}

获取数组的长度方法

# 取得数组元素的个数length=${#array_name[@]}# 或者length=${#array_name[*]}# 取得数组单个元素的长度lengthn=${#array_name[n]}

shell注释

以”#”开头的行就是注释,会被解释器忽略.sh里没有多行注释,只是每一行加一个#号

shell传递参数

我们可以在执行shell脚本时,向脚本传递参数,脚本内获得参数的格式$n.n代表数字,1为脚本的第一个参数,2为执行脚本的第二个参数

我们可以设置脚本的执行权限,并执行脚本
chmod+xtext.sh ./test.sh 1 2 3

运算符

shell和其他编程语言一样,支持多种运算符,包括:

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符
    原生bash不支持简单的数学运算,但是可以用过其他命令来实现,例如awk和expr,expr最常用
    expr是一款表达式计算工具,使用它能完成表达式的求值操作.
原创粉丝点击