Shell编程

来源:互联网 发布:淘宝网淋浴塑料帘布 编辑:程序博客网 时间:2024/05/13 20:57

Shell编程

让.sh可执行

修改文件属性

chmod a+x xxx.sh

添加注释

在.sh脚本脚本中添加如下注释

#!/usr/bash

使用变量

变量分类

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

变量命名

  • 首个字符必须为字母(a-z,A-Z)。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

定义变量

#定义字符串(注意等号之间不可以有空格)    var="this is a string!"#定义数字    var=100#定义只读变量    readonly var

使用变量

#无括号echo $var#有括号echo ${var}#删除变量unset var

字符串

定义字符串

a='a'#单引号定义字符串str='this is a ${a}'##结果为this is a ${a},单引号内的任何字符串都会原样输出#双引号定义字符串str="this is a ${a}"##结果为this is a a,双引号里边可以出现转义字符,并可以有变量

字符串的相关操作

#拼接字符串str1="hello"str2="world"str="${str1} ${str2}"#获取字符串长度echo ${#str}#提取子字符串echo ${str:1:4}

Shell数组

定义数组

array=(1 2 3 4 5)arraystr=("a" "b" "c" "d")#可以单独定义数组的值array[0]=value0...array[n]=valuen

使用字符串

#使用数组元素的一般格式是:${array[n]}#获取数组所有元素${array[@]}#获取数组长度length=${array[@]}

运算符

算术运算符

shell本身不支持算术运算符,需要使用expr进行算术运算
或者使用let

逻辑运算符

注意逻辑运算符的格式如下 :

    [ a op b ]#注意中间的空格#如果为真返回0,如果为假返回1

关系运算符

运算符 说明 -eq == -ne != -gt > -lt < -ge
=
-le <=

逻辑运算符

  • &&
  • ll

字符串运算符

运算符 说明 = 判断是否相等 != 是否不等 -z 是否长度为0 -n 是否有内容 str 等同于-n

文件测试运算符

操作符 说明 举例 -b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。 -c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。 -d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。 -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。 -g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。 -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。 -p file 检测文件是否是具名管道,如果是,则返回 true。 [ -p $file ] 返回 false。 -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。 -r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。 -w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。 -x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。 -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。 -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

输入输出

输出

echo

echo something

printf

#same as `printf` in Cprintf "%d" 100

输入

read

read var

流程控制

分支结构

if [ condition ]then    commandelif then    commandelse     commandfi
case var invalue-1)    command;;value-1)    command;;*)    command;;esac

循环结构

for var in item1 item2do    commanddone 
while condition(true/:)do    commanddone

函数

定义函数

[function] fun [()]{    command    [return value;]}

使用函数

  • 函数相当于一条语句
  • 用$?获取函数返回结果
  • 在函数中用1,2获取参数

文件包含

#包含文件. filename
0 0