一、shell定义与执行
shell既是一种应用程序,又是一种程序设计语言
shell是用户和Linux内核之间的接口程序

》作为应用程序: 交互式地解释、执行用户输入的命令,将用 户的操作翻译成机器可以识别的语言,完成相应 功能 》作为程序设计语言: 它定义了各种变量和参数,并提供了许多在 高级语言中才具有的控制结构,包括循环和分支 完成类似于windows下批处理操作,简化我们 对系统的管理与应用程序的部署
》Linux系统中提供了好几种不同的shell命令解释器,如sh、ash、bash等。
》一般默认使用bash作为默认的解释器。
》我们后面编写的shell脚本,都是由上述shell命令解释器解释执行的。

给文件添加权限

chmod + r + 文件名 给该文件增加可读的权限 chmod + w + 文件名 给该文件增加可写的权限 chmod + x + 文件名 给该文件增加可执行的权限 ./文件名 执行该文件

系统进行调用的shell脚本
》/etc/profile
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公告环境变量在这里设置,开始自启动的程序,一般也在这里设置。
》~/.bashrc
用户自己的家目录中的.bashrc
登录时会自动调用,打开任意终端时也会自动调用
这个文件一般设置与个人用户有关的环境变量,如交叉编译器的路径等等。
1.定义以 #!/bin/bash 开头
2.单个 # 代表注释当前行
3.bash 直接指定使用bash解释文件
例如:

chmod +x test.sh;
./test.sh
bash test.sh
.test.sh

》三种执行脚本的方式不同点:

1、./ 和 bash 执行过程基本一致,后者明确指定bash解释器去执行脚本, 脚本中 #! 指定的解释器不起作用。前者首先检测 #! ,使用 #! 指定的shell, 如果没有,使用默认的shell。
2、用 ./ 和 bash 去执行会在后台启动一个新的shell去执行脚本。 用 . 去执行脚本不会启动新的shell,直接由当前的shell去解释执行脚本。

二、shell变量

*shell的变量按照变量的作用可以分为4类:
1.环境变量:主要保存与环境相关的参数
2.用户自定义变量:用在脚本内表达运行过程中数据
3.位置参数变量:用来向脚本中传递参数,变量名不能自定 义
4.预定义变量:是bash中已定义的变量,按照变量的作用范 围可以分为2类:
1.全局变量:是环境变量,其值不随shell脚本的执行结束而消失
2.局部变量:shell程序内部定义的,其使用范围仅限于定义 它的程序,包括用户自定义变量、位置变量和预定义变量。

一、自定义变量

定义变量 变量名 = 变量值 如:num = 10
引用变量 $变量名 如:i = $num 把变量num的值付给变量i
显示变量 使用echo命令可以显示单个变量取值 如:echo $num
清除变量 使用unset命令清除变量 如:unset num

二、读取变量

read string 从键盘输入一个字符串赋值给变量string,若string没定义,则先定义再使用。
readonly string = 100 定义一个只读变量,只能在定义时初始化赋值, 以后其值不能改变,不能被清除。
export STRING = 300 使用export说明的变量,会被导出为环境变量。其他shell均可使用。

传统上,所有环境变量均为大写
显示环境变量 使用env命令可以查看所有的环境变量
清除环境变量 使用unset命令清除环境变量

三、注意事项

1.变量名只能是英语字母、下划线、数字。开头不能是数字 1_num = 10 错误 num_1 = 10 正确
2.等号两边不能直接接空格符,若变量中本身就包含了空格, 则整个字符串都要用双引号、或单引号括起来;双引号内的特殊字符(即 $变量) 可以保留变量的特性,但是单引号内的特殊字符则仅为一般的字符,没有特殊意义。
name=aa bb //错误
name="aa bb" //正确
echo "$name is me" //输出:aa bb is me
echo "$name is me" //输出:$name is me

四、环境变量:
》shell在开始执行时就已经定义了一些和系统的工作环境有
关的变量,我们在shell中可以直接使用$name引用
》定义:
一般在~/.bashrc或/etc/profile文件中(系统自动调用的脚
本)使用export设置,允许用户后来更改
VARNAME = value ;export VARNAME
》传统上,所有环境变量均为大写
》显示环境变量
使用env 命令可以查看所有的环境变量。
》清除环境变量
使用unset 命令清除环境变量
常见环境变量:

HOME 用于保存注册目录的完全路径名
PATH 用于保存用冒号分隔的目录路径名,shell将按PATH变量中给出的顺序搜索这目录,找到的第一 个与命令名称一致的可执行文件将被执行 PATH=$HOME/bin:/bin:/usr/bin;export PATH
HOSTNAME 主机名
SHELL 默认的shell命令解析器
LOGNAME 此变量保存登录名
PWD 当前工作目录的绝对路径名 ······

五、预定义变量

预定义变量:
$#  传给shell脚本参数的数量
$*  传给shell脚本参数的内容
$1、$2、$3、...、$9 运行脚本时传递给其的参数,用空格隔开
$?  命令执行后返回的状态,"$?"用于检查上一个命令是否正确   (在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)
$0  当前执行的进程名
$$  当前进程的进程号,"$$"变量最常见的用途是用作临时文件的名字以保证临时文件不会重复

脚本变量的特殊用法:"" `` ' \ () {}
》""(双引号):包含的变量会被解释
》''(单引号):包含的变量会当做字符串解释
》`(数字键1左面的反引号):反引号中的内容作为系统命令
,并执行其内容,可以替换输出为一个变量
$ echo "today is 
`date` "
today is 2012年07月29日星期日 12:55:21 CST
》\ 转义字符:
同c语言 \n \t \r \a等 echo命令需加-e转义
》(命令序列):
由子shell来完成,不影响当前shell中的变量
》{ 命令序列 }:---注意:“{”、“}”前后有一空格
在当前shell中执行,会影响当前变量

三、条件测试语句
》在写shell脚本时,经常遇到的问题就是判断字符串是否相等,
可能还要检查文件状态或进行数字测试,只有这些测试完成才能
做下一步动作
》test命令:用于测试字符串、文件状态和数字
》test命令有两种格式:
test condition 或[ condition ]
使用方括号时,要注意在条件两边加上空格
》shell脚本中的条件测试如下:
文件测试、字符串测试、数字测试、复合测试
》测试语句一般与后面讲的条件语句联合使用
*文件测试:测试文件状态的条件表达式

-e   是否存在
-d  是目录
-f  是文件
-r  可读
-w  可写
-x  可执行
-L  符号连接
-c  是否字符设备
-b  是否块设备
-s  文件非空

字符串测试:

test str_operator “str”
test “str1” str_operator “str2”
[ str_operator “str” ]
[ “str1” str_operator “str2”]
》其中str_operator可以是:
=  两个字符串相等
!= 两个字符串不相等
-z  空串
-n  非空串

测试数值格式如下:

test num1 num_operator num2
[ num1 num_operator num2 ]
》*num_operator可以是:
-eq     数值相等
-ne     数值不相等
-gt     数1大于数2
-ge     数1大于等于数2
-le     数1小于等于数2
-lt     数1小于数2

命令执行控制:

》&&:
command1 && command2
&&左边命令(command1)执行成功(即返回0)shell才执行&&
右边的命令(command2)
》||
command1 || command2
||左边的命令(command1)未执行成功(即返回非0)shell才
执行||右边的命令(command2)
例:
test -e /home && test -d /home && echo "true"
test 2 -lt 3 && test 5 -gt 3 && echo "equal"
test "aaa" = "aaa" || echo "not equal" && echo "equal"

多重条件判定:

-a (and)两状况同时成立!test -r file -a -x file,file同时具有r与x权限时,才为true.
-o (or)两状况任何一个成立!t t est -r file -o -x file,file具有r或x权限时,就传回true.
! 相反状态test ! -x file,当file不具有x时,回传true.

四、控制语句 if case for while until break

①====》
if [条件1];
then执行第一段程序
else执行第二段程序
fi
②====》
if [条件1];
then执行第一段程序
elif [条件2]
then执行第二段程序
else执行第三段程序
fi

case $变量名称 in
“第一个变量内容”)程序段一;;
“第二个变量内容”)程序段二;;
*)其它程序段exit 1
esac

for (( 初始值; 限制值; 执行步阶
))
do程序段
done
初始值:变量在循环中的起始值
限制值:当变量值在这个限制范围内时,就继续进行循环
执行步阶:每作一次循环时,变量的变化量

for var in con1 con2 con3 ...
do程序段
done
第一次循环时,$var的内容为con1
第二次循环时,$var的内容为con2
第三次循环时,$var的内容为con3
......

while [ condition ]
do程序段
done
当condition成立的时候进入while循环,直到condition不成立时才退出循环。

until [ condition ]
do程序段
done
这种方式与while恰恰相反,当condition成立的时候退出循环,否则继续循环。

 break
》break命令允许跳出循环。
》break 通常在进行一些处理后退出循环或case 语句continue
》continue 命令类似于break 命令
》只有一点重要差别,它不会跳出循环,只是跳过这个循环步 

五、函数
》 有些脚本段间互相重复,如果能只写一次代码块而在任何地方都能引用那就提高了代码的可重用性。
》 shell允许将一组命令集或语句形成一个可用块,这些块称为shell函数。
》 定义函数的两种格式:
函数名() {
命令 ...
}
function 函数名() {
命令 ...
}
》 函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。
》 所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。
调用函数的格式为:
  函数名 param1 param2……
》 使用参数同在一般脚本中使用特殊变量
$1,$2 ...$9一样
》 函数可以使用return 提前结束并带回返回值
return 从函数中返回,用最后状态命令决定返回值。
return 0 无错误返回
return 1 有错误返回

Linux中Shell脚本编程相关推荐

  1. Linux之shell脚本编程

    Linux之shell脚本编程 编程介绍 shell 介绍 shell 脚本编程介绍 shell脚本命令 shell 编程基础知识 编程介绍 计算机编程的本质:输入.运算.输出 编译型语言: 程序在执 ...

  2. Linux中 shell 脚本获取当前工作目录的方法

    Linux中 shell 脚本获取当前工作目录的方法 1. 示例 2. 注意: 参考: 1. 示例 test.sh target_dir=$(cd $(dirname $0); pwd) echo $ ...

  3. linux存放脚本目录,linux中Shell脚本所在目录的绝对路径linux操作系统 -电脑资料...

    linux shell 脚本里面如果想得到当前脚本文件存放的绝对路径,也没有太现成的命令可以调用,不过可以通过下面的语句来获取:代码如下复制代码 baseDirForScriptSelf=$(cd & ...

  4. linux系统shell脚本编程,Linux系统shell脚本编程(一)

    哈喽,大家好,我是Adam.前面我发了不少关于linux 的文章,今天也是一样,将分几篇文章系统化的讲讲shell脚本编程.废话不多说,走起走起!        首先说一下shell脚本是什么.简单来 ...

  5. Linux,shell脚本编程-图书管理系统

    Shell脚本编程-图书管理系统 准备的数据库 代码块 前期准备 进入页面 主菜单 展示图书 查找图书 添加图书 编辑图书 借书 还书 删除图书 运行 演示 主界面 展示图书 查找图书 添加图书 编辑 ...

  6. Linux下eclipse中shell脚本编程环境的搭建

    注意:本文所用到的linux发行版是fedora 15.如果用fedora 15以上的版本可能会有问题.至于解决方案或者是搭建方法我会尽量抽出时间写一篇新的博客... 本文主要是介绍在linux平台下 ...

  7. linux脚本 程序输入,[转]Linux中shell脚本如何自动输入…

    shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量.条件.算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力得多. 但 ...

  8. Linux 中shell脚本编写教程

    1.文本处理工具 1.1 grep工具 Linux grep 命令用于查找文件里符合条件的字符串.  grep [选项] '关键字 文件名 grep 指令用于查找内容包含指定的范本样式的文件,如果发现 ...

  9. Linux基础-shell脚本编程

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨土豆居士 来源丨一口Linux shell 编程 一.变量 1. shell脚本基础知识 编译型 ...

最新文章

  1. 【基础】pandas中apply与map的异同
  2. java 正则 子字符串_使用Java正则表达式来查找另一个子字符串中的子字符串
  3. Opserver开源的服务器监控系统(ASP.NET)
  4. ROS系统MoveIt玩转双臂机器人系列(二)--生成MoveIt配置包
  5. 【java】浅析JDK中ServiceLoader的源码
  6. AI大咖们的18岁照,你能认对几个?
  7. 铁芯用matlab怎么仿真,Simulink的BLDC建模与仿真
  8. ECG的滤波和检波资源汇总
  9. java pgp加密_GPG(pgp)加解密中文完整教程
  10. 用matlab解线性规划题目,用MATLAB软件解线性规划范例
  11. [美国]《暮光之城4:破晓(下)》[BD-RMVB.720p.中英双字][2012年冒险幻想]
  12. input输入框添加键盘事件
  13. 基于loongnix20系统,libvlc代码直接集成测试
  14. 三维CAD设计软件的核心技术解析----工业软件讲坛第二次讲座
  15. XX is not defined import impor了还是not defined ant design组件import还是not defined
  16. DeFi是什么?DeFi对未来意味着什么?
  17. [Codevs] 一塔湖图
  18. Matlab与单片机的串口通信-matlab…
  19. 【学术科研】——论文神器
  20. 【模板题】欧拉函数与线性筛求欧拉函数

热门文章

  1. 广州坐标系转换大地2000_珞珈德毅DEU2000坐标转换软件通过2000国家大地坐标系转换软件测评...
  2. CGAL 基础知识(学习笔记)
  3. 华为eNSP防火墙NAT地址转换之NAT-NOPAT
  4. 【干货】Apache Hive 2.1.1 安装配置超详细过程,配置hive、beeline、hwi、HCatalog、WebHCat等组件...
  5. GitHub 3.1K,业界首个流式语音合成系统开源!
  6. 四季查询器(通过月份查询季度)
  7. [Python] 反转链表相关技巧
  8. React-hooks-ts-antd项目 使用阿里图标库中的图标
  9. AWS服务器密码登录设置
  10. typecho图片水印插件