转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8176137.html

一:脚本文件的创建、格式、运行

1:创建shell脚本

首先,要创建一个文件

touch 文件名

然后,编辑该文件,将命令输入其中。

脚本文件第一行,需要指明使用的shell种类:

#! shell的路径
比如:
#!/bin/bash

脚本的注释符号是井号 #。

#注释

一般脚本格式为:

#!/bin/bash
#脚本注释:介绍脚本的用途
命令行、代码

2:改变文件权限

默认创建的文件没有执行权限,需要收到赋予。

chmod u+x 文件名

3:执行文件

对于经常执行的文件,需要将shell脚本所处目录添加到PATH环境变量去,这样,每次只需输入脚本名即可运行。

对于一次性使用的,则通过路径来启动:

./脚本名  :运行当前目录下的脚本文件
/.../.../脚本名  :通过绝对路径运行某个脚本文件

二:基本操作

1:打印输出

echo 内容
例如:
echo "字符串"
echo $变量名将命令行结果输出到字符串后面:
echo -n "字符串: "
command

2:使用环境变量

可以通过 set 命令查看系统中的环境变量。

在脚本中,可以通过  $环境变量名 来引用。

3:使用用户变量

shell编程的变量不需要声明后使用,直接赋值就是声明。

引用变量可以  $变量名 或者  ${变量名}  来引用。

var=value  :赋值的同时即声明
$var ${var}  :引用变量var2 = $var1  :变量之间的赋值:后者必须用 $ ,否则相当于字符串赋值给var2

4:提取命令输出

将命令的输出赋值给变量,有两种方法:

反引号法:

var=`command` :用反引号括住命令,那么命令的执行就自动提取给变量

美元括号法:

var=$(command)  :用括号将命令括住,命令的运行结果被提取赋值给变量

5:重定向输入输出

输出重定向:

command > 文件:将输出写入文件(覆盖)
command >> 文件 :将输出追加到文件

输入重定向:

command < 文件 

6:管道

将一个命令的输出作为另一个命令的输入。

command1 | command2 

[一般,最常用的场景是:将命令行产生的大量输出,通过管道传送给more显示]

7:进行数学运算

法一(不推荐):expr

expr 运算表达式

法二:方括号法

$[运算表达式]

注意:bash中是数学运算针对整数,如果涉及浮点数,一般需要借助外在程序。

8:退出脚本

exit [退出码]

查看退出码:

$?  :保存了最近一个脚本的退出码

三:结构化命令——基本语句

1:条件语句

if [condition]
thencommandselif [condition]then    commandselse    commands
fi或者
if [condition]; thencommands
fi

判断条件主要包括:非空判断、数值比较、字符串比较、文件比较等。

非空判断:

if [$变量]  :变量是否为空

数值比较:(注意:如果用符号来比较,需要转义!)

    -eq (equal)           等于,如:if [ "$a" -eq "$b" ]-ne (not equal)       不等于,如:if [ "$a" -ne "$b" ]-gt (greater than)    大于,如:if [ "$a" -gt "$b" ]-ge (greater equal)   大于等于,如:if [ "$a" -ge "$b" ]-lt (less than)       小于,如:if [ "$a" -lt "$b" ]-le (less equal)      小于等于,如:if [ "$a" -le "$b" ]<                     小于(需要双括号),如:(("$a" < "$b"))<=                    小于等于(需要双括号),如:(("$a" <= "$b"))>                     大于(需要双括号),如:(("$a" > "$b"))>=                    大于等于(需要双括号),如:(("$a" >= "$b"))

字符串比较:(注意:如果用符号来比较,需要转义!)

=       等于,如:if [ "$a" = "$b" ]==     等于,如:if [ "$a" == "$b" ], 与=等价注意:==的功能在[[]]和[]中的行为是不同的,如下:1 [[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么将为true2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true34 [ $a == z* ]      # File globbing 和word splitting将会发生5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true!=      不等于,如:if [ "$a" != "$b" ], 这个操作符将在[[]]结构中使用模式匹配.<       小于,在ASCII字母顺序下.如:if [[ "$a" < "$b" ]]if [ "$a" \< "$b" ]     在[]结构中"<"需要被转义.>       大于,在ASCII字母顺序下.如:if [[ "$a" > "$b" ]]if [ "$a" \> "$b" ]  在[]结构中">"需要被转义.-z       字符串为"null".就是长度为0.-n       字符串不为"null"

文件比较:

-d file:检查file是否一个目录
-e file:检查file是否存在
-f file:检查file是否是一个文件
-r file:检查file是否存在且可读
-s file:检查file是否非空
-w file:检查file是否可写
-x file:检查file是否可执行
-O file:检查file是否属于当前用户
-G file:检查file存在的默认组是否与当前用户相同
file1 -nt file2:file1是否比file2新
file1 -ot file2:file1是否比file2旧

条件复合:

与: [ condition ] && [ condition ]
或: [ condition ] || [ condition ]

高级特性

双括号:在双括号内进行更复杂的数学运算

if ((高级运算))高级运算主要有:
++
--
!
~
**
>>
<<
&
|
&&
||

双方括号:进行高级字符串比较运算

if [[高级字符串运算]]高级字符串运算主要是指:模式匹配
例如:
if [[$var == r*]]

case语句:

case $变量 in
pattern1)  commands;;  #注意,两个分号!
pattern2 | pattern3)commands;;
*)                                #其他情况commands;;

2:循环语句

for-in语句:

for var in list
docommands
done

列表中的符号、空格怎么处理:转义  或者  用双引号将符号与单词合并

list:可以是变量($变量)、可以是命令的输出( $(command) )、可以是某目录下的通配符( for file in /../../*)

for循环语句:

for ((i = 起始值;i < 临界值; i++))
docommand
done

while语句:

while [ condition ]
docommand
done

until语句:

until [ condition ]
docommand
done 

跳出循环:

break:跳出当前循环

break n:跳出第n层循环,当前循环为1,往外数递增。

continue:终止当前次循环,开启下一次循环

重定向循环的输出:

各种循环语句
......
......
done > 输出文件

Shell脚本编程基础笔记一相关推荐

  1. shell脚本编程学习笔记1(xdl)——shell基础与Bash基本功能()

    shell脚本编程学习笔记1--shell基础与Bash基本功能 1,简介: 1,Shell就是一个命令行解释器,用以连接输入设别和内核. 2,Shell是解 释执行的脚本语言,在Shell中可以直接 ...

  2. shell脚本编程学习笔记5(xdl)——正则表达式

    shell脚本编程学习笔记5--正则表达式 1,简介 正则表达式,用来在文件中匹配符合条件的字符串,包含匹配.注意是文件中选择字符串,和通配符是 不同的.grep,awk,sed等命令可以支持正则表达 ...

  3. linux基础—课堂随笔_03 SHELL脚本编程基础

    shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then 条件为真的分支代码  fi(结尾) 双分支 if(开头)判断条件:then 条件为 ...

  4. Linux Shell脚本编程基础

    2 Linux Shell脚本编程基础 发表于: Linux, Shell, UNIX, 资源分享 | 作者: 谋万世全局者 标签: Linux,Shell,编程基础,脚本 本文作者:Leal 授权许 ...

  5. shell脚本编程学习笔记6(xdl)——字符串截取命令

    shell脚本编程学习笔记6--字符串截取命令 1,cut命令 [root@localhost ~]# cut [选项] 文件名-f 列号,表示提取第几列-d 分隔符,按照指定的分隔符分割列注意:默认 ...

  6. shell脚本编程学习笔记8(XDL)——流程控制和循环

    shell脚本编程学习笔记8--流程控制和循环 1,if语句 1,框架 1,单分支:if [条件判断式] ;thenprogramfiif [条件判断式]thenprogramfi注意:if语句使用f ...

  7. shell脚本编程学习笔记2(xdl)——Bash变量

    shell脚本编程学习笔记2--Bash变量 1,变量简介 1,计算机内存单元2,设置规则字母数组下划线组成,不能以数字开头Bash中,默认类型字符串型,变量类型可修改 2,Bash变量规则 1,变量 ...

  8. shell脚本编程学习笔记4(xdl)——Bash常见环境变量

    shell脚本编程学习笔记4--Bash常见环境变量 非专业运维,例如开发人员,环境变量熟悉常见的,了解不常见的即可. 1,简介 环境变量配置文件中主要是定义对系统的 操作环境生效的系统默认环境变量, ...

  9. SHELL 脚本编程基础

    目录 前言 一. shell 概述 1.1 shell 和 shell 脚本 1.1.1 什么是shell 1.1.2 shell的作用 1.1.3 shell脚本是什么 1.1.4 shell脚本能 ...

最新文章

  1. Task01——零基础入门NLP - 新闻文本分类之赛题理解
  2. Cloudera Manager 5 和 CDH5 本地(离线)安装指南(Hadoop集群搭建)
  3. 编写边界条件测试用例原则
  4. PHP js curl,php curl 获取javascript动态生成的值
  5. 【测试点0分析】1009 Product of Polynomials (25 分)
  6. 【转载】负数的二进制
  7. 什么是URL转发和一个IP建多个Web站点--主机头名法
  8. 【HBase】学习笔记
  9. cms是什么意思啊_美团面试官问我:ZGC 的 Z 是什么意思?
  10. 数值分析书籍以及Intel性能分析工具
  11. PCB设计中基板颜色含义
  12. Unity 2D打地鼠小游戏
  13. Node+puppeteer学习笔记(五)--API问题解决--使用功能强大的“ eval ”函数
  14. wps文件上的logo怎么去掉_PPT上LOGO怎么去掉怎么去除母版logo
  15. python单词表首字母排序_python 字母排序不区分大小写
  16. 数据结构基础之堆排序
  17. 复旦大学硕士盲审 计算机学院,《复旦大学论文抽检、盲审工作的通知.doc
  18. n条线段可以组成多少种三角形
  19. 计算机专业教师资格证考什么内容,计算机教师资格证需要考什么?信息技术教师资格证考试内容...
  20. 移动安全--23--其他Android安全知识总结

热门文章

  1. RabbitMQ 整合 Spring AMQP 实战
  2. Docker容器时间与宿主机同步
  3. 一个关于if else容易迷惑的问题(转自鸟哥公众号)
  4. 为什么要使用 Node.js
  5. 整理各个平台的访问入口及快速推文的方法
  6. Oracle occi 抓包,instantclient 32下载-instantclient-basic(轻量级数据库)32位 11.2.0.4.0 官方版 - 河东下载站...
  7. KVM Disk Cache简析
  8. libvirt/qemu特性之快照
  9. 「Vijos 1285」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法药水
  10. UITextView