Linux Shell 编程中的特殊符号
一、井号 #
1、在脚本文件中对一行进行注释。
2、在引号和\符号后不是注释,只是#号本身:
echo "12 # hehe"
echo '12 # hehe'
echo 12 \# hehe
3、参数替代
echo $(PATH#*:)
4、进制数转换
echo $((16#a));将十六进制数a转换为十进制数表示出来
echo $((5#3));将5进制数3转换为十进制数表示出来
5、模式匹配
echo ${#string};获得变量string所含字符的个数,如果string是个数组,则获得数组第一个元素所含字符个数。
二、分号 ;
1、分割符,在同一行中用分号可以隔开两个命令:
ls;cat hello
2、在引号和\符号后不是分割符,只是;号本身。
三、;;
1、两个分号,作为case选项的终结符:
case "$variable" in
abc) echo "$variable = abc" ;;
xyz) echo "$variable = xyz" ;;
esac
四、句号 .
1、点开头的文件是隐藏文件,要用ls -a才能看到。
2、一个点指代当前目录,两个点指代上级目录。
五、引号
1、双引号 ""
双引号中的大多数字母或符号都代表它本身
2、单引号 ‘’
单引号中的所有字母或符号都代表它本身
六、逗号 ,
逗号用于分开多个算术表达式,对每个表达式都进行计算,但仅仅返回最后一个表达式的值。
let "t = (a = 9,5+3)"#该表达式中,对a赋值为9,计算出来t为8
七、反斜杠 \
\号表示后面的符号仅仅代表该符号本身,但只有一位有效。比如
\a就和'a'一个效果
八、正斜杠 /
1、文件名分割符,如
/usr/locale/share/
2、除法符号
九、反引号 ``
命令取代?
十、冒号 :
1、空命令,返回值为0,和true命令一样,可以在做无限循环的条件。
2、提醒后面有一个二进制命令需要执行
: ${username = `whoami`}#如果没有:则该行会出错
3、参数取代?
: ${HOSTNAME?}
4、与>重定向符号一起创建一个文件(如果没有),或者截断一个文件(该文件已存在),该文件的长度为0
: > data.exe 和cat /dev/null > data.exe效果相同
5、与>>重定向符号一起更新一个文件的访问及修改时间,如果没有该文件,则创建之。和touch功效相同
注意,4、5两条都仅对规则文件起作用,对管道,软连接以及一些特殊文件都没有用
6、域分割符
如$PATH变量中间的冒号
十一、感叹号 !
1、非号,把退出状态变成由0变成1,由等于变成不等 = ,!=
2、间接变量参考?
3、两个感叹号表示上一个命令 !!
十二、星号 *
1、通配符,可以在正则表达式中代替任何字符或者数字
2、乘号
3、两个星号表示指数 **
十三、问号 ?
1、测试符号,用于条件测试?
2、通配符,可以在正则表达式中代替一个字符或者数字
十四、$
1、变量符号
2、表示一行的终止
3、${}变量取代
4、$1,$2,$3等等,指从命令行向脚本输入的第一个,第二个,第三个参数。$0指脚本本身。
5、$#,指从命令行向脚本输入的参数个数。
6、$*,指从命令行向脚本输入的所有参数,但是看成一个词。
7、$@,指从命令行向脚本输入的所有参数,但是每个参数是根据IFS变量分开的。
比如:export IFS=':',再echo $PATH,得到的结果是:/usr/local/sbin /usr/sbin /sbin /usr/local/bin /usr/bin /bin /usr/games /usr/lib/apache-ant/bin /usr/lib/java/bin /usr/lib/java/jre/bin /usr/lib/qt/bin /usr/share/texmf/bin
8、$?,退出状态变量。
9、$$,进程的ID号码。
十五、圆括号 ()
1、命令组
(a = 123;echo $a)
该命令组写了一个子脚本,子脚本中的变量对子脚本外的一切脚本均不可见。
2、数组初始化
array = (element1 element2 element3)
十六、大括号 {}
1、括号扩展?比如
grep linux file*.{txt,htm*}
在file2.txt,file1.htm,file1.html等文件中查找linux字符串
2、代码块,作为子函数,不能用于终端中,子函数中的变量对其他脚本还是可见的。
3、代码块中的函数可以进行输入输出重定向。
{
read line1
read line2
} < /etc/fstab
=====================================================
缺省值(:-)
如果变量后面跟着冒号和减号,则变量后面跟着是这个变量的缺省值。
$ COMPANY=
$ printf “%s/n” “${COMPANY:-Unknown Company}”
Unknown Company
变量的实际值可以保持不变。
冒号也可以省略掉不用:
$ COMPANY=
$ printf “%s/n” “${COMPANY-Nightlight Inc.}”
$
指定缺省值(:=)
如果变量后面跟着冒号和等号,则给空变量指定一个缺省值。
$ printf “%s/n” “${COMPANY:=Nightlight Inc.}”
Nightlight Inc.
$ printf “%s/n” “$COMPANY”
Nightlight Inc.
变量的实际值已经改变了。
去除冒号,则不会指定缺省值。
变量是否存在检查(:?)
如果变量后面跟着冒号和问号,则根据变量是否存在,显示不同的信息。信息不是必选的。
printf “Company is %s/n” /
“${COMPANY:?Error: Company has notbeen defined—aborting}”
如果没有冒号则不会进行检查。
覆盖缺省值(:+)
如果变量后面跟着冒号和加号,则加好后面的字符串替换默认字符串。
$ COMPANY=”Nightlight Inc.”
$ printf “%s/n” “${COMPANY:+Company has been overridden}”
Company has been overridden
如果没有冒号,变量也被字符串所替换,变量本身的值不改变。
替换部分字符串(:n)
如果变量后面跟着一个冒号和数字,则返回该数字开始的一个子字符串,如果后面还跟着一个冒号和数字。则第一个数字表示开始的字符,后面数字表示字符的长度。
$ printf “%s/n” “${COMPANY:5}”
light Inc.
$ printf “%s/n” “${COMPANY:5:5}”
light
根据模板删除字串(%,#,%%,##)
如果变量后面跟着井号,则返回匹配模板被删除后的字串。一个井号为最小可能性的匹配,两个井号为自大可能性的匹配。表达式返回模板右边的字符。
$ printf “%s/n” “${COMPANY#Ni*}”
ghtlight Inc.
$ printf “%s/n” “${COMPANY##Ni*}”
$ printf “%s/n” “${COMPANY##*t}”
Inc.
$ printf “%s/n” “${COMPANY#*t}”
light Inc.
使用百分号,表达式返回模板左边的字符
$ printf “%s/n” “${COMPANY%t*}”
Nightligh
$ printf “%s/n” “${COMPANY%%t*}”
Nigh
(在我的Linux系统中上述命令不起取用)
使用模板进行子字符串的替换(//)
如果变量后只有一个斜杠,则两个斜杠中间的字符串是要被替换的字符串,而第二个斜杠后面的字符串是要替换的字符串。如果变量后面跟着两个斜杠,则所有出现在两个斜杠中间的字符都要被替换为最后一个斜杠后面的字符。
$ printf “%s/n” “${COMPANY/Inc./Incorporated}”
Nightlight Incorporated
$ printf “You are the I in %s” “${COMPANY//i/I}”
You are the I in NIghtlIght Inc.
如果模板一#号开始,则匹配以模板开始的字符,如果模板以%号结尾,则匹配以模板结尾的字符。
$ COMPANY=”NightLight Night Lighting Inc.”
$ printf “%s/n” “$COMPANY”
NightLight Night Lighting Inc.
$ printf “%s” “${COMPANY//Night/NIGHT}”
NIGHTLight NIGHT Lighting Inc.
$ printf “%s” “${COMPANY//#Night/NIGHT}”
NIGHTLight Night Lighting Inc.
(我的Linux中这个不起作用)
如果没有指定新的值,则匹配的字符会被删除。
$ COMPANY=”Nightlight Inc.”
$ printf “%s/n” “${COMPANY/light}”
Night Inc.
也可以使用范围符号。例如:删除所有字符串中的标点符号,使用范围[:punct:]。
$ printf “%s” “${COMPANY//[[:punct:]]}”
Nightlight Inc
使用星号或@符号替换变量会替换外壳脚本中所有的参数,同样,在数组中使用星号或@符号也会替换数组中的所有元素
变量说明:
$$
Shell本身的PID(ProcessID)
$!
Shell最后运行的后台Process的PID
$?
最后运行的命令的结束代码(返回值)
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
Linux Shell 编程中的特殊符号的更多相关文章
- Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||
https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...
- 《Linux shell编程中 diff与vimdif的使用》RHEL6
linux比较2个文件的区别有两个命令: (1)diff (2)vimdiff cp /etc/grub.conf hello 在hello文件的末尾添加zhangsan 使用diff比较2个文件的区 ...
- linux shell编程中的数组定义、遍历
代码如下: 数组定义法1: arr=( ) # 注意是用空格分开,不是逗号!! 数组定义法2: array array[]="a" array[]="b" ar ...
- Linux Shell编程参考大全
本文记录Linux Shell编程中常用基本知识,方便快速入门以及查询使用. 本文主要分为以下几个部分: 一.Shell中的变量 任何编程语言中,有关变量的定义,作用范围,赋值等都是最最基础的知识. ...
- linux —— shell 编程(编程语法)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...
- linux shell编程总结
linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...
- shell编程中的单/双 小括号, 中括号, 大括号
linux shell中的变量类型?分字符串或者数字或者bool类型吗? 参考: http://www.cnblogs.com/nufangrensheng/p/3477281.html 不分! sh ...
- linux shell 编程参考
#!/bin/bash my_fun() { echo "$#" } echo 'the number of parameter in "$@" is '$(m ...
- Linux Shell编程之常用技巧
前言 本文集中介绍了bash编程中部分高级编程方法和技巧.通过学习本文内容,可以帮你解决以下问题: 1.bash可以网络编程么? 2..(){ .|.& };. 据说执行这些符号可以死机,那么 ...
随机推荐
- Activity系列讲解---返回结果的处理
设想一下:由当前Activity跳转到其它Activity,从其它Activity再返回到当前Activity时,如何获取其它Activity存放的数据?下面用一个例子讲解, 点击selsect按钮跳 ...
- css3中变形函数(同样是对元素来说的)和元素通过改变自身属性达到动画效果
/*对元素进行改变(移动.变形.伸缩.扭曲)*/ .wrapper{ margin:100px 100px auto auto; width:300px; height:200px; border:2 ...
- MVC 定时执行任务
环境:.net4.5 需求:需要一个方法定时执行任务 解决: System.Threading.Timer 提供以指定的时间间隔执行方法的机制. 此类不能被继承,有10多种实例化方法,满足多种情况. ...
- maven学习(上)- 基本入门用法
一.下载及安装 1.1 下载maven 3.1.1 先到官网http://maven.apache.org/download.cgi 下载最新版本(目前是3.1.1 ),下载完成后,解压到某个目录(本 ...
- PHP反射API
近期忙着写项目,没有学习什么特别新的东西,所以好长时间没有更新博客.我们的项目用的是lumen,是基于laravel的一个轻量级框架,我看到里面用到了一些反射API机制来帮助动态加载需要的类.判断方法 ...
- iOS-上架APP之启动页设置(新手必看!)
今天自己做的小作品准备提交,就差一个启动页,各种百度,各种搜,结果还好最后终于出来了,和大家分享一下,这个过程中遇到的各种小问题.(注XCode版本为7.2) 1.启动页一般都是图片,因为苹果有4,4 ...
- zsh 自动补全导致命令显示重复
关键字:autocomplete, zsh, backspace, securecrt, xterm, linux console 举个例子: 输入命令ls 然后按TAB补全试试,发现竟然是这样的 ...
- 【Java EE 学习 56】【酒店会员管理系统技术点总结】
一.树状菜单加载 这是js的一个典型应用,使用zTree插件能够完成该项任务http://www.ztree.me/v3/main.php 我是用的版本:zTree2.5 使用方法: <%@ p ...
- 用python DIY一个图片转pdf工具并打包成exe
最近因为想要看漫画,无奈下载的漫画是jpg的格式,网上的转换器还没一个好用的,于是乎就打算用python自己DIY一下: 这里主要用了reportlab.开始打算随便写几行,结果为若干坑纠结了挺久,于 ...
- Python-面向对象(类)一
一.如何创建类 class cls: pass 二.创建方法 构造方法: __init__(self, arg) obj = 类('a1') 普通方法: obj = 类('xxx') obj.普通方法 ...