shell基础笔记1
---恢复内容开始---
1 test命令中不能使用浮点小数值,如:
done
.... now $var can be used ....
例子:
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"
该脚本运行结果:
What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
注意:select是扩展应用。
如果给变量赋的值中有空白字符,引号是必须的。
从字符串的右边结尾处提取?echo ${stringZ: -4}
12 子串替换:
- ${string/substring/replacement}
-
用$replacement替换由$substring匹配的字符串。
- ${string//substring/replacement}
-
用$replacement替换所有匹配$substring的字符串。
1 stringZ=abcABC123ABCabc
2
3 echo ${stringZ/abc/xyz} # xyzABC123ABCabc
4 #用'xyz'代替第一个匹配的'abc'.
5
6 echo ${stringZ//abc/xyz} # xyzABC123ABCxyz
7 # 用'xyz'代替所有的'abc'. - ${string/#substring/replacement}
-
如果$string字符串的最前端匹配$substring字符串,用$replacement替换$substring.
- ${string/%substring/replacement}
-
如果$string字符串的最后端匹配$substring字符串,用$replacement替换$substring.
1 stringZ=abcABC123ABCabc
2
3 echo ${stringZ/#abc/XYZ} # XYZABC123ABCabc
4 # 用'XYZ'替换前端的'abc'.
5
6 echo ${stringZ/%abc/XYZ} # abcABC123ABCXYZ
7 # 用'XYZ'替换后端的'abc'.
19 case特例
20 shell变量的子串应用技术
shell中截取字符串的方法有很多中,
${expression}一共有9种使用方法。
${parameter:-word}当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.
${parameter:=word}与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将
word赋值给变量。
${parameter:?word}若变量以赋值的话,正常替换.否则将消息message送到标准错误输出(若
此替换出现在Shell程序中,那么该程序将终止运行)
${parameter:+word} 若变量以赋值的话,其值才用word替换,否则不进行任何替换。
上面4种可以用来进行缺省值的替换。
${#parameter}
上面这种可以获得字符串的长度。
${parameter%word} 最小限度从后面截取word
${parameter%%word} 最大限度从后面截取word
${parameter#word} 最小限度从前面截取word
${parameter##word} 最大限度从前面截取word
${parameter/string/replace}从左往右第一个匹配的string进行替换
${parameter//string/replace}从左往右所有匹配string的进行替换
上面4个就是用来截取字符串的方法了。 有了着四种用法就不必使用cut命令来截取字符串了 第一种又可以分为四种情况,下面一一介绍。 1、使用 # 号操作符。用途是从左边开始删除第一次出现子字符串即其左边字符,保留右边字符。用法为#*substr,例如: str='http://www.你的域名.com/cut-string.html' echo ${str#*//} 得到的结果为www.你的域名.com/cut-string.html,即删除从左边开始到第一个"//"及其左边所有字符2、使用 ## 号操作符。用途是从左边开始删除最后一次出现子字符串即其左边字符,保留右边字符。用法为##*substr,例如: str='http://www.你的域名.com/cut-string.html' echo ${str##*/} 得到的结果为cut-string.html,即删除最后出现的"/"及其左边所有字符 3、使用 % 号操作符。用途是从右边开始删除第一次出现子字符串即其右边字符,保留左边字符。用法为%substr*,例如: str='http://www.你的域名.com/cut-string.html' echo ${str%/*} 得到的结果为http://www.你的域名.com,即删除从右边开始到第一个"/"及其右边所有字符 4、使用 %% 号操作符。用途是从右边开始删除最后一次出现子字符串即其右边字符,保留左边字符。用法为%%substr*,例如: str='http://www.你的域名.com/cut-string.html' echo ${str%%/*} 得到的结果为http: ,即删除从右边开始到最后一个"/"及其右边所有字符 第二种也分为四种,分别介绍如下: 1、从左边第几个字符开始以及字符的个数,用法为:start:len,例如: str='http://www.你的域名.com/cut-string.html' echo ${var:0:5} 其中的 0 表示左边第一个字符开始,5 表示字符的总个数。 结果是:http: 2、从左边第几个字符开始一直到结束,用法为:start,例如: str='http://www.你的域名.com/cut-string.html' echo ${var:7} 其中的 7 表示左边第8个字符开始 结果是:www.你的域名.com/cut-string.html 3、从右边第几个字符开始以及字符的个数,用法:-start:len,例如: str='http://www.你的域名.com/cut-string.html' echo ${str:-15:10} 其中的 -15 表示右边算起第15个字符开始,10 表示字符的个数。 结果是:cut-string 3、从右边第几个字符开始一直到结束,用法:0-start,例如: str='http://www.你的域名.com/cut-string.html' echo ${str:-4} 其中的 -4 表示右边算起第4个字符开始。 结果是:html 注:(左边的第一个字符是用 0 表示,右边的第一个字符用 -1 表示)
附:
21 老男孩shell笔记
[[ $a == "z*" ]] # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真.
6 select语句 脚本示例:
echo what is your os type?
select os in "linux" "unix" "windows" "quit"
do case "$os" in
"linux") echo your os is "$os";;
"unix") echo your os is "$os";;
"windows") echo your os is "$os";;
"quit") exit;;
*)continue;;
esac break
done
7 [[ condition1 && condition2 ]] 或 [ condition1 ] && [ condition2 ]
[[ condition1 || condition2 ]] 或 [ condition1 ] || [ condition2 ]
[ condition1 -a condition2 ] 或 [ condition1 ] && [ condition2 ]
[ condition1 -o condition2 ] 或 [ condition1 ] || [ condition2 ]
8 if [ "$string1" = "$string2" ]
# if [ "X$string1" = "X$string2" ] 是一种更安全的做法,
# 这样可以防止两个变量中的一个为空所产生的错误.
# (字符"X"作为前缀在等式两边是可以相互抵消的.)
then
command
fi
9 间接引用变量:[root@localhost ~]# a=b
[root@localhost ~]# b=c
[root@localhost ~]# echo ${!a}
c
10 获取web访问状态码:curl -o /dev/null -s -w %{http_code} http://www.baidu.com
11 awk 'BEGIN{print (3>2)?1:4}' 小括号省略报错。
12 mail -s "hello,dingzhao" dingzhao@xywy.com << !
XXXXXXXXX.............
!
13 awk '{$2=$2"|";print $NF ~ /PASSED/ ? "ges|info|"$0 : "ges|error|"$0}'
22 BASH脚本字符串分片
如果变量var的前缀匹配Pattern, 那么就使用Replacement来替换匹配到Pattern的字符串.
${var/%Pattern/Replacement}
如果变量var的后缀匹配Pattern, 那么就使用Replacement来替换匹配到Pattern的字符串.
23 bash编程:数组初步
24 bash知识点:while循环和until循环
25 shell 中数学计算总结
1、错误方法举例
a)
var=1+1
echo $var
输出的结果是1+1,悲剧,呵呵
b)
var=1
var=$var+1
echo $var
输出结果是1+1,依然悲剧,呵呵
2、正确方法
1)使用let
var=1
let "var+=1"
echo $var
输出结果为2,这次没有悲剧
注意:
a)经我测试let几乎支持所有的运算符,在网上看到一篇文章说“let不支持++、--和逗号、(、)”,但经我测试自加、自减、以及括号的优先级都得到了很好的支持
b)方幂运算应使用“**”
c)参数在表达式中直接访问,不必加$
d)一般情况下算数表达式可以不加双引号,但是若表达式中有bash中的关键字则需加上
e)let后的表达式只能进行整数运算
2)使用(())
var=1
((var+=1))
echo $var
输出结果为2
注意:
(())的使用方法与let完全相同
3)使用$[]
var=1
var=$[$var+1]
echo $var
输出结果位2
注意:
a)$[]将中括号内的表达式作为数学运算先计算结果再输出
b)对$[]中的变量进行访问时前面需要加$
c)$[]支持的运算符与let相同,但也只支持整数运算
4)使用expr
var=1
var=`expr $var + 1`
echo $var
输出结果为2
注意:
a)expr后的表达式个符号间需用空格隔开
b)expr支持的操作符有: |、&、<、<=、=、!=、>=、>、+、-、*、/、%
c)expr支持的操作符中所在使用时需用\进行转义的有:|、&、<、<=、>=、>、*
e)expr同样只支持整数运算
5)使用bc(可以进行浮点数计算)
var=1
var=`echo "$var+1"|bc`
echo $var
输出结果为2
介绍:
bc是linux下的一个简单计算器,支持浮点数计算,在命令行下输入bc即进入计算器程序,而我们想在程序中直接进行浮点数计算时,利用一个简单的管道即可解决问题。
注意:
1)经我测试bc支持除位操作运算符之外的所有运算符。
2)bc中要使用scale进行精度设置
3)浮点数计算实例
var=3.14
var=`echo "scale=2;$var*3"|bc`
echo $var
输出结果为9.42
6)使用awk(可已进行浮点数计算)
var=1
var=`echo "$var 1"|awk '{printf("%g",$1*$2)}'`
echo $var
输出结果为2
介绍:
awk是一种文本处理工具,同时也是一种程序设计语言,作为一种程序设计语言,awk支持多种运算,而我们可以利用awk来进行浮点数计算,和上面bc一样,通过一个简单的管道,我们便可在程序中直接调用awk进行浮点数计算。
注意:
1)awk支持除微操作运算符之外的所有运算符
2)awk内置有log、sqr、cos、sin等等函数
3)浮点数计算实例
var=3.14
var=`echo "$var 2"|awk '{printf("%g",sin($1/$2))}'`
echo $var
输出结果为1
3、总结
终于把所有能搜集到的资料看完,并最后总结出一套自己的东西了,以后再遇到类似问题就有的看了,哈哈~
26
shell基础笔记1的更多相关文章
- bash shell学习-shell基础 (笔记)
When you hoist the sails to cross the sea, you willride the wind and cleave the waves. "长风破浪会有时 ...
- Shell 基础笔记
1-22-shell脚本的基础 本节所讲内容: shell 基本语法 变量 第1章 什么是SHELL?.. 2 1.1 shell编程.. 3 第2章 shell变量及运用.. ...
- Shell基础笔记一
由于工作需要,开始学习Shell编程,都是一些简单的基础知识,现整理收集分享出来,希望对大家有帮助 -------------------------------------------------- ...
- shell基础笔记
什么是shell脚本 我自己对shell脚本的理解就是一系列的shell命令加入逻辑关系,实现类似"批处理"的功能.而不是简单的命令的堆砌,那样的shell脚本bug重重. 脚本开 ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- 《UNIX-Shell编程24学时教程》读书笔记Chap1,2 Shell基础,脚本基础
Chap1 Shell基础 知道该使用哪种命令是依赖于经验的.----惟手熟尔. 1.1 什么是命令 其实知道这些名词好像也没什么帮助,嘻嘻 1.2 什么是Shell 不同用户不同的提示符:不同的环境 ...
- shell基础二十篇 一些笔记
shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...
- Linux笔记(shell基础,历史命令,命令补全/别名,通配符,输出重定向)
一.shell 基础 shell是个命令解释器,提供用户和机器之间的交互 每个用户都可以拥有自己特定的shell centos7默认Shell为bash(Bourne Agin shell) 除了ba ...
- php代码审计基础笔记
出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 --------------------------- ...
随机推荐
- 洛谷P3306 [SDOI2013]随机数生成器(BSGS)
传送门 感觉我BSGS都白学了……数学渣渣好像没有一道数学题能自己想出来…… 要求$X_{i+1}=aX_i+b\ (mod \ \ p)$ 左右同时加上$\frac{b}{a-1}$,把它变成等比数 ...
- SpringBoot 2.0 整合sharding-jdbc中间件,实现数据分库分表
一.水平分割 1.水平分库 1).概念: 以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中. 2).结果 每个库的结构都一样:数据都不一样: 所有库的并集是全量数据: 2.水平分表 1).概 ...
- 笔记-JavaWeb学习之旅4
JDBC: 概念:Java DataBase Connectivity Java 数据库连接,Java语言操作数据库 本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口,各个数 ...
- 解决IIS中运行TopJUI左侧菜单不显示的问题
TopJUI演示系统中,模拟数据保存在.json文件中,目前发现有部分用户的IIS容器默认情况下是不支持.json文件的请求的,因此需要配置一下,可参考下文配置解决: 一.IIS 6 1. MIME设 ...
- ZOJ 4019 Schrödinger's Knapsack (from The 18th Zhejiang University Programming Contest Sponsored by TuSimple)
题意: 第一类物品的价值为k1,第二类物品价值为k2,背包的体积是 c ,第一类物品有n 个,每个体积为S11,S12,S13,S14.....S1n ; 第二类物品有 m 个,每个体积为 S21,S ...
- Java EE学习笔记(三)
Spring AOP 1.Spring AOP简介 1).AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程).它是面向对象编程(OOP)的一种补充 ...
- 为什么会出现lvs+nginx
一.ngix(应用层 网络七层负载均衡) 1.异步转发,请求数据和相应数据都要经过ngix,ngix和客户端建立连接 2.轮询所有的tomcat服务器,保证请求成功或者最后一台tomcat服务器也请求 ...
- android开发学习 ------- 仿QQ侧滑效果的实现
需要做一个仿QQ侧滑删除的一个效果: 一开始是毫无头绪,百度找思路,找到 https://blog.csdn.net/xiaxiazaizai01/article/details/53036994 ...
- asp。Net 页面传值
00.引言 Web页面是无状态的, 服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留.在用ASP.NET 设计开发一个Web系统时, 遇到一 ...
- cp参数详解
-a 相当于pdr的意思 -d 若原文件为连接文件,则复制链接文件属性,而非文件本身 -f 强制复制,有重复时,不询问用户,而直接强制复制 -i 目标文件存在的话,先询问 -p 与文件的属性一起复制 ...