linux之shell编程基本语法
Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell。Shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是在用linux的shell命令编程>。一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的。
原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6681562.html
微信:intsmaze
基本格式
代码写在普通文本文件中,通常以 .sh为后缀名
vi intsmaze.sh
#!/bin/bash ## 表示用哪一种shell解析器来解析执行我们的这个脚本程序 echo "hello world" ## 注释也可以写在这里 ## 这是一行注释
执行脚本
sh intsmaze.sh
或给脚本添加x权限,直接执行,否则只能通过sh xxx.sh执行
chmod 755 intsmaze.sh
./intsmaze.sh
基本语法
系统变量
Linux Shell中的变量分为“系统变量”和“用户自定义变量”。可以通过set命令查看系统变量。
[hadoop@centos-Reall-131 shtest]$ set BASH=/bin/bash HADOOP_HOME=/home/hadoop/hadoop-2.6.4 HISTCONTROL=ignoredups HISTFILE=/home/hadoop/.bash_history HISTFILESIZE=1000 HISTSIZE=1000 HOME=/home/hadoop HOSTNAME=centos-Reall-131 HOSTTYPE=i386 ID=500 JAVA_HOME=/home/hadoop/app/jdk1.7.0_65 LANG=en_US.UTF-8 LESSOPEN='|/usr/bin/lesspipe.sh %s' LINES=24 LOGNAME=hadoop
访问系统变量:$HOME、$PWD、$SHELL、$JAVA_HOME等等
自定义变量
1、语法
变量=值 (例如STR=abc)
等号两侧不能有空格
使用变量: $arg
双引号和单引号有区别:双引号仅将字符串中的空格脱意;单引号会将字符串中的变量引用比如$param脱意。
2、示例
[hadoop@centos-Reall-131 ~]$ STR=hello world -bash: world: command not found[hadoop@centos-Reall-131 ~]$ STR="hello world" [hadoop@centos-Reall-131 ~]$ A=9 [hadoop@centos-Reall-131 ~]$ echo $A 9 [hadoop@centos-Reall-131 ~]$ echo $STR hello world
如果想打印 hello worlds is greater 怎么办?
echo $STRs is greate 行吗?
不行,正确写法是:
echo ${STR}s is greate
[hadoop@centos-Reall-131 ~]$ echo ${STR}s is greate hello worlds is greate [hadoop@centos-Reall-131 ~]$ echo '${STR}s is greate' ${STR}s is greate[hadoop@centos-Reall-131 ~]$ echo "please$STR" pleasehello world[hadoop@centos-Reall-131 ~]$ echo 'please$STR'please$STR
unset A 撤销变量 A
readonly B=2 声明静态的变量 B=2,不能 unset
export A #可把变量提升为当前shell进程中的全局环境变量,可供其他子shell程序使用
vi a.sh
#!/bin/bash a="a in a.sh" echo $a /root/scripts/b.sh
vi b.sh
#!/bin/bash b="b in b.sh" echo $b echo $a
然后执行 ./a.sh ,会发现b脚本中并没有把a脚本中定义的a变量打印出来。
如果要在b中打印出a脚本的变量a,需要在a脚本中把变量a做export定义,此时,a变量就成了a.sh脚本所在bash进程的全局变量,该进程的所有子进程都能访问到变量a。
另一种方式:
如果在a.sh脚本中用如下方式调用b.sh
. ./b.sh ## 注意:重点关注最前面那个 “.”号
或者
source ./b.sh ##
则,b.sh就在a.sh所在的bash进程空间中运行,而不是在a进程中的子进程中运行了。
总结:
1、a.sh中直接调用b.sh,会让b.sh在a所在的bash进程的“子进程”空间中执行
2、而子进程空间只能访问父进程中用export定义的变量
3、一个shell进程无法将自己定义的变量提升到父进程空间中去
4、“.”号执行脚本时,会让脚本在调用者所在的shell进程空间中执行
3、反引号赋值
A=`ls -la` ## 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) ## 等价于反引号
4、特殊变量
$? 表示上一个命令退出的状态码
$$ 表示当前进程编号
$0 表示当前脚本名称
$n 表示n位置的输入参数(n代表数字,n>=1)
$# 表示参数的个数,常用于循环
$*和$@ 都表示参数列表
注:$*与$@区别
$* 和 $@ 都表示传递给函数或脚本的所有参数
ü 不被双引号" "包含时——
$* 和 $@ 都以$1 $2 … $n 的形式组成参数列表
ü 当它们被双引号" "包含时——
"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式组成一个整串;
"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式组成一个参数列表
linux之shell编程基本语法相关推荐
- 【linux】shell编程 脚本语法
1.对shell的认识 shell是linux中一个重要的层次,他是用户与系统交互作用的界面.最常见的使用方式:在介绍linux命令时,shell都是作为命令解释程序出现:他接收用户打入的命令,进行分 ...
- Linux的Shell编程基本语法
编写shell脚本的时候,最开始的第一行要加上: #!/bin/bash 这句话是告诉系统用bash这个解析器 一.shell变量 shell变量和一些编程语言不同,一般shell的变量赋值 ...
- Linux _ Shell编程 — 循环语句
Linux _ Shell编程 - 循环语句 一.循环语句for的用法 二.循环语句while的用法 三.循环控制语句 一.循环语句for的用法 for 变量名 in 单词表do命令表done 变量依 ...
- 运维 - 第一阶段 - linux与shell编程
linux与shell编程 讲师:墨竹 系统运维与linux 1.系统运维是什么 简单来说运维(Operation and maintenance)是指对公司硬件和软件的维护. 硬件包括:机房.机柜. ...
- Linux之shell编程篇-----Shell 函数和Shell 输入/输出重定向
最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! Shell 函数 1. 自定义函数 linux she ...
- shell for循环1到100_浅谈Linux下shell 编程的for循环常用的6种结构
浅谈Linux下shell 编程的for循环常用的6种结构 1. 常用for循环结构 (1) for 变量 in 值1 值2 值3... do 程序块儿 done (2) for 变量 in `命令` ...
- linux中快捷脚本,Linux下Shell编程快捷键大全(日常整理)
有时候,我们需要在 Bash 中重复执行先前的命令.你当然可以使用上方向键来查看之前曾经运行过的命令.但这里有一些更好的方式,例如,数量掌握以下的快捷键. 1) !!:重复执行上一条指令 2) !a: ...
- linux系统——Shell编程之变量解释
linux系统--Shell编程之变量解释 - Shell能做什么 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略-) 自动化批量软件部署程序 (LAMP,LNMP,Tomca ...
- Linux _ Shell编程 — 功能语句
Linux _ Shell编程 - 功能语句 一.说明性语句 二.常用功能性语句 1.常用功能性语句(read命令) 2.expr命令 三.结构性语句 条件测试语句 字符串测试 整数测试 文件的测试 ...
最新文章
- 通俗易懂!使用Excel和TF实现Transformer
- OSChina 周六乱弹 —— 从恋爱到分手完全没有征兆
- linux 5 防火墙,CentOS 5 Linux iptables防火墙的配置
- web前端入门学习 css(1)
- jquery 如何保存拖动空间的位置
- 小问题: windows组件调用失败,无法加载安装安装程序:Wbemupgd.dll
- spring的ModelAndView
- java部署平台_开源Java自动化部署平台JDeploy
- maven 项目上传私服pom配置
- TurboMail成功建设某省建工集团邮件系统
- python装饰器详解-python装饰器详解
- MySQL二进制部署
- 会议日程安排问题python
- 在波点音乐听周杰伦新歌专辑,一起“用音乐穿越”
- 直播带货系统的六大热门功能模块概述
- 史上最全!作为一名Java面试者你应该知道的
- rad xe 5 使用教程_使用Rad轻松实现React在线样式
- php异步执行shell脚本
- 破解WINDOWS7密码
- arcgis里dem填洼_ArcGIS水文分析实战教程(4)地形预处理