【Shell】Shell脚本注意事项
1、大部分的Linux系统默认配置bash。对比sh,bash扩展了一些命令和参数,并且保留对sh的一些兼容。除了bash、sh还有csh(语法类似C语言)、tcsh(csh升级版)、ash(适合低内存环境)
2、脚本开头 #!/bin/sh #!必须有,后面跟上的是shell的路径
3、变量赋值和取值
(1) Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。
variable=value 注意:赋值号左右不能留空格
(2) $后面跟上变量表示读取变量里面的值,特殊情况可以加上{}表示变量的边界
#!/bin/sh
a=
abc=
echo $a
echo ${a}bc
echo $abc
运行结果:
(3) 单引号和双引号的区别:以单引号' '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量也会把它们原样输出,双引号内的变量才会取值输出
#!/bin/sh
tmp="test"
a="hello world $tmp"
b='hello world $tmp'
echo $a
echo $b
运行结果:
4、Linux命令结果赋值:用反引号(Esc下面、tab上面的点)表示
#!/bin/sh
tmp=`test`
commond=`date`
a="hello world $commond"
echo $a
5、运算符:
(1) expr :一般用于算数运算后面跟上需要运算的算法,需要用反引号,每个参数间要有空格
(2) $(( )): 算法要有空格
(3) let: 算法不能有空格
#!/bin/sh
tmp="test"
a=`expr +`
r=$((*))
let a=a+
echo $r $a a=`expr + `
r=$(( * ))
let a = a +
echo $r $a a=`expr + `
r=$(( * ))
let a=a+
echo $r $a
运行结果:
6、数组定义
(1) 或者
(2) 取值:
7、If...else...if: 和常用编程语言的区别在于结束是用fi表示,每个条件后面要加上then,
(1) 方括号([ ])内的参数之间必须有空格
(2) 多条件判断
8、 case ... esac :类似其他语言的switch ... case,case工作方式如上所示。取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。
9、While 循环
10、Shell 函数:可以将可能重复用到的命令封装成一个函数,函数可以带返回值,函数内用return返回,函数外用$?接收返回值。Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”。
如果有需要返回其他类型的值,可以在外部定义一个变量,来接受结果。
11、参数:shell脚本可以带参数,在脚本中,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
12、“#”井号表示注释
13、特殊字符
特殊变量 |
说明 |
$# |
传递给函数的参数个数。 |
$* |
显示所有传递给函数的参数 |
$? |
函数的返回值。 |
$0 |
当前脚本的文件名 |
$$ |
当前Shell进程ID |
-eq |
检测两个数是否相等,相等返回 true。 |
-ne |
检测两个数是否相等,不相等返回 true。 |
-gt |
检测左边的数是否大于右边的,如果是,则返回 true。 |
-lt |
检测左边的数是否小于右边的,如果是,则返回 true |
-ge |
检测左边的数是否大等于右边的,如果是,则返回 true。 |
-le |
检测左边的数是否小于等于右边的,如果是,则返回 true |
【Shell】Shell脚本注意事项的更多相关文章
- 4.Vim编辑器与Shell命令脚本
第4章 Vim编辑器与Shell命令脚本 章节简述: 本章首先讲解如何使用Vim编辑器来编写.修改文档,然后通过逐个配置主机名称.系统网卡以及Yum软件仓库参数文件等实验,帮助读者加深Vim编辑器中诸 ...
- shell及脚本4——shell script
一.格式 1.1 开头 必须以 "# !/bin/bash" 开头,告诉系统这是一个bash shell脚本.注意#与!中间有空格. 二.语法 2.1 数值运算 可以用decla ...
- 【Telnet】使用Telnet协议连接到远程Shell执行脚本
介绍 本文介绍如何通过Telnet协议连接到远程Shell,执行脚本,并获取执行结果: 相关文章: <[Jsch]使用SSH协议连接到远程Shell执行脚本>http://www.cnbl ...
- shell自动计算脚本
shell自动计算脚本 #!/bin/bash echo $(($)) [root@bogon ~]# sh b.sh 123+123246 let用户声明这个操作是要计算,后者的效率更高 (expr ...
- Shell菜单脚本
今天在这儿给大家分享一个我简单编写的Shell菜单脚本,傻瓜式的人机交互,人人都可以操作linux. #!/bin/sh #Shell菜单演示 function menu () { cat <& ...
- shell常见脚本30例
shell常见脚本30例 author:headsen chen 2017-10-19 10:12:12 本文原素材出自网上,特此申明.有些地方加入我自己的改动 常见的30例shell脚本 1.用 ...
- shell常用脚本
shell常用脚本 author:headsen chen 2017-10-17 15:36:17 个人原创,转载请注明,否则依法追究法律责任 1,vim name.grep.sh 2,cat ...
- 一篇关于Maven项目的jar包Shell启动脚本
使用Maven作为项目jar包依赖的管理,常常会遇到命令行启动,笔者也是哥菜鸟,在做微服务,以及服务器端开发的过程中,常常会遇到项目的启动需要使用main方法,笔者潜心的研究了很多博客,发现大多写的都 ...
- Linux shell编写脚本部署pxe网络装机
Linux shell编写脚本部署pxe网络装机 人工安装配置,Linux PXE无人值守网络装机 https://www.cnblogs.com/yuzly/p/10582254.html 脚本实 ...
- 使用shell解析脚本依赖关系,并自动补数
将脚本依赖关系放到表中 使用shell解析脚本依赖关系,递归的计算各个脚本. #!/bin/bash # dm 补数 basepath=$(cd ``; pwd) cd $basepath sourc ...
随机推荐
- go-spew golang最强大的调试助手,没有之一
go内置的fmt.sprintf已经很强大了,但是和spew比起来还是相形见绌,这里来一个例子. import ( "fmt" "github.com/davecgh/g ...
- 快速下载android源码
众所周知的原因,android源码被墙了,还好国内有不少镜像,这里使用清华提供的镜像. 以下内容转自: https://wiki.tuna.tsinghua.edu.cn/MirrorUsage/an ...
- kali linux之主动信息收集(二层发现)
主动信息收集: 直接与目标系统交互信息,无法避免留下访问的痕迹 使用受控的第三方电脑进行探测,如(使用代理或者使用肉鸡,做好被封杀的准备,使用噪声迷惑目标,淹没真实的探测流量) 识别活着的主机,会有潜 ...
- luoguP3302 [SDOI2013]森林
https://www.luogu.org/problemnew/show/P3302 看到查询第 k 小,而且是一颗树,可以联想到在树上的主席树,a 和 b 路径中第 k 小可以通过在 a, b, ...
- 【python】使用python smtplib库发邮件添加cc,bcc
#!/usr/bin/env python# -*- coding: utf-8 -*- '''@author@mail @date 2017/03/16 发送邮件'''import smtplibf ...
- CF138D World of Darkraft
$ \color{#0066ff}{ 题目描述 }$ n*m的格子,每个格子有字符'L','R',X',初始可以选择所有格子. 当选了 'L'的格子时,当前格子左下右上这条线上所有点不能选; 当选了 ...
- Spring boot redis自增编号控制 踩坑
近段期间,公司 接手一个订单号生成服务,规则的话已经由项目经理他们规定好了,主要是后面的四位数代表的关于当前订单号已经执行第几个了.而这里面有一个要求就是支持分布式.为了实现这个东西,刚开始我使用了r ...
- NAND NOR Flash 和MTD
来自:http://blog.sina.com.cn/s/blog_6b489d5e0102xm62.html 一.NAND和NOR Flash 一般来说,快闪记忆体可分为两大规格,一个是NAND, ...
- centos6+如何对外开放80,3306端口号或者其他端口号
1.查看防火墙对外开放了哪些端口 [root@hadoop110 ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt sour ...
- C# 利用Powershell获取网络相关信息
利用Get-NetAdapter获取信息 Get-NetAdapter 参考链接:https://docs.microsoft.com/en-us/powershell/module/netadapt ...