博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux系统中的 Shell 编程
阅读量:4161 次
发布时间:2019-05-26

本文共 1999 字,大约阅读时间需要 6 分钟。

文章目录

一.Shell Script 介绍

1.概念

  • shell脚本是包含一系列命令的文本文件
  • shell读取此文件并执行命令

2.应用场景

  • 重复性操作
  • 批量事务处理
  • 自动化运维
  • 定时任务执行

3.demo:第一个Shell脚本test.sh

  • 输入 : vi test.sh ,输入如下内容然后保存退出
#!/bin/bashecho "hello, shell,you're very pretty"
  • 输入: chmod +x test.sh ,赋予文件执行权限
  • 输入: ./test.sh ,执行该脚本文件,效果如下:
    效果
  • 注意:#!是一个约定的标记,他告诉系统这个脚本需要用解释器来执行

二.变量

1.三种引号的作用:

1)反引号:引用命令的结果

在这里插入图片描述

2)单引号:强引用,引号中什么内容就输出什么内容

在这里插入图片描述

3)双引号:弱引用,可引用变量的值

在这里插入图片描述

2.变量的定义和使用

1)demo01

  • 1.新建一个param.sh,写入如下内容
#!/bin/bash#变量定义不需要声明类型abc=123#变量的值可以用$符号获取aaa=$JAVA_HOMEaaa=abc#间接引用,用aaa的值去找变量,若这个变量有值,分配给defdef=${!aaa}#找abc的第一个1替换为habc=${abc/1/h}#使用反引号将该命令的结果赋值给变量path=`pwd`#打印结果echo ${aaa}aaa${abc}echo $defecho $path
  • 2.给与执行权限,并执行文件,结果如下:
    变量

2)demo02:整数表达式运算

  • 新建文件,内容如下:
#!/bin/bash#方式一:a=1b=2((c=$a+$b))echo c的值: $c#方式二:d=$[ $a+$b ]echo d的值: $d
  • 给与执行权限执行结果如下:
    执行效果

3.预定义变量

选项 说明
$# 命令行参数或位置参数的数量
$? 最近一次执行的命令或shell脚本的出口状态
$* 表示所有的位置参数,其值是所有位置参数的值
$$ 变量是shell脚本里面的进程id,shell脚本经常使用$$变量组织临时文件名,确保文件名唯一性

4.位置变量

  • $n(n为数字) : $0 代表命令本身,$1-$9代表顺序参数编号,大于10的话使用括号,如${10}
  • 示例如下:
#!/bin/bashecho 参数个数: $#echo 所有位置参数: $*echo '上一句结果(执行成功为0):' $?echo 进程id: $$echo 当前命令: $0echo 第一个参数: $1echo 第二个参数: $2
  • 执行结果如下:
    执行结果

三.数值关系运算符

1.数值关系运算符

选项 说明
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

2.逻辑运算符

选项 说明
-a 或者 && 逻辑与
-o 或者 || 逻辑或
! 逻辑否

3.字符串运算符

选项 说明
= 等于
!= 不等于
-z 判断是否为空

4.文件运算符(写在文件或目录前面)

选项 说明
-d 判断是否为目录
-e 判断目录或文件是否存在
-f 判断是否为文件
-r 判断文件或目录针对当前用户是否可读
-w 判断文件或目录针对当前用户是否可写
-x 判断文件或目录针对当前用户是否可执行

四.流程控制语句

<- bash shell脚本中变量无法存储布尔值,布尔值只能用于条件判断,条件中非空的话结果都为true >

if语句:

1.if语句:

if thenfi

2.if-else语句:

ifthen		...else	...fi

3.if-else-if语句:

ifthen	...elifthen	...else	...fi

for循环:

1.普通for循环:

for((a=1;a<=5;a++))do	...done

2.增强for循环:

for a in param1 param2 param3 ...do	...done

while循环:

a=1while [ a -le 5 ]do	...	let "a++"done

case语句:

case 变量 in	值1)		...		;;	值2)		...		;;	*)		...		;;esac

五.shell的函数

  • 语法如下:
函数名(){
# 函数体具体代码}函数名-->注意没有括号直接用函数名调用
  • 示例:求1-100的和
#!/bin/bashread -p "请输入一个大于1的整数:" na(){
count=0 for((a=1;a<=n;a++)) do ((count=$count+$a)) done echo 总和为: $count}a

-运行结果如下:

100和

转载地址:http://idjxi.baihongyu.com/

你可能感兴趣的文章
SuperMap许可驱动安装流程详解
查看>>
UDBX开放数据格式白皮书
查看>>
流数据存储之Elasticsearch添加发送器常见问题
查看>>
SuperMap iDesktop之模型缩放
查看>>
SuperMap iClient3D for WebGL绘制河流
查看>>
iCloudManager部署---VMware ESXi 5.5安装及设置(一)
查看>>
iCloudManager部署---VMware vCenter的安装及设置(二)
查看>>
SuperMap iClient 8C(2017) for 3D那些你不知道的事儿
查看>>
iCloudManager部署---iCloudManager的安装及设置(三)
查看>>
三维建模贴图技巧
查看>>
SuperMap iObjects .NET 制作2.5D数据详解(一)
查看>>
MongoDB在SuperMap产品中的使用
查看>>
Oracle业务表和视图在SuperMap中的应用
查看>>
菜鸟都应该知道的倾斜摄影测量知识
查看>>
协同标绘在SuperMap中实现思路的探索
查看>>
iServer 缓存介绍
查看>>
Linux上安装Weblogic并部署iserver 7C war 包
查看>>
SuperMap iServer 7C(2015) war包在Linux上的WebSphere 部署
查看>>
SuperMap iObjects .NET 实现聚合显示详解
查看>>
循序渐进 SuperMap iDesktop 8C 插件开发
查看>>