9、linux的特殊符

在shell中常用的特殊符号罗列如下:

#   ;   ;;      .      ,       /       \       ‘string‘|       !   $   ${}   $?      $$   $*  "string"*     **   ?   :   ^   $#   [email protected]    `command`{}  []   [[]]   ()    (())  ||   &&       {xx,yy,zz,...}~   ~+   ~-    &   \<...\>   +       -        %=   ==   !=

01、#      #!/bin/bash

        注释符(comments);  a=1 #a是等于1的

        ${#name} 给出name的长度

        ${name#word} 从name的头部开始删除与word匹配的最小部分,然后返回剩余部分
        ${name##word} 从name的头部开始删除与word匹配的最长部分,然后返回剩余部分
       (注,name为变量名,word为要匹配的字符串)

02、 >    重定向输出符号。
03、 >>  重定向输出符号,没有就新建,有就追加。
04、 2>  错误重定向输出符号,覆盖原文件内容。
05、 2>>  错误重定向输出符号,没有就新建,有就追加。0、1和2分别表示标准输入、标准输出和标准错误信息输出
06、 *    匹配任意字符。
07、 ?  匹配任意一个字符。
08、 |     管道符号 (pipeline)。解释:command1|command2,将command1的输出作为command2的输入,管道命令只接受标准输入(standoutput)。
09、 &   后台进程符。 
10、 &&   逻辑与符号。用法:命令1 && 命令2 表示如果命令1执行成功,继续执行命令2。
11、 ||    逻辑或符号。用法:命令1 | | 命令2 表示如果命令1执行成功,不执行命令2;但如果命令1执行失败才执行命令2。

12、!   逻辑非符号(negate or reverse)。排除指定范围。例:ls a[!0-9]  例:条件侦测中,用 != 来代表"不等于"
13、[x-y]   表示一定的范围。
14、” ”      双引号 (double quote)表示把它所包含的内容作为普通字符,但` ` $ \ ‘ ‘ 几个符号除外。
15、’ ’         单引号 (single quote)表示把它所包含的内容作为普通的字符,无特殊例外。
16、$     变量符,提取变量,如echo $HOME,查看变量;正则表达式中表示行首。
17、\      转义字符,就是将特殊字符转换成其本来的普通字符的意思。
18、``       反单引号(backticks),表示它所包含的内容。一般作为嵌入的命令使用,此命令将先执行。

       date=`date +%Y%m%d%H%M%S`  date +%F

19、;        连续命令分隔符 (Command separator)。
20、<          重定向输入符。
21、()         表示整体执行命令 (command group)
       用括号将一串连续指令括起来,这种用法对 shell 来说,称为指令群组。

       例子:(cd ~ ; vcgh=`pwd` ;echo $vcgh),指令群组有一个特性,shell会以产生 subshell来执行这组指令。因此,在其中所定义的变数,仅作用于指令群组本身

22、^          反向选择符,例:grep -n ‘^[^a-zA-Z]‘ wokao.txt,[]内的叫反向选择符,[]外的则表示定位在行首。

23、.     在 shell 中1个 dot 代表当前目录,两个 dot 代表上层目录;

      档案名称以 dot 开头,属特殊的隐藏档案;

      在 RE 中,一个 dot 代表匹配一个字元。

24、,     (comma)常运用在运算当中当做"区隔"用途。t1 = ((a = 5 + 3, b = 7 - 1, c = 15 / 3))

25、/    斜线 (forward slash) 在路径表示时;

     在四则运算中,代表除法的符号;

26、((  ))   这组符号的作用与 let 指令相似,用在算数运算上

1、{} 大括号:
用法一:通配符扩展
eg: ls my_{finger,toe}s
这条命令相当于如下命令的组合:
ls my_fingers my_toes
eg: mkdir {userA,userB,userC}-{home,bin,data}
我们将得到 userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data,
userC-home, userC-bin, userC-data,这几个目录
用法二:可用于语句块的构造,语句之间用回车隔开。如果你想在某些使用单个语句的地方(比如在AND或
OR列表中)使用多条语句,你可以把它们括在花括号{}中来构造一个语句块。
eg:
{
grep -v "$cdcatnum" $strack_file > $temp_file
cat $temp_file > $strack_file
echo
cat -n file1
} (注:以上大括号中的四句命令够成了一个语句块)
用法三:参数扩展
${name:-default} 使用一个默认值(一般是空值)来代替那些空的或者没有赋值的变量name;
${name:=default}使用指定值来代替空的或者没有赋值的变量name;
${name:?message}如果变量为空或者未赋值,那么就会显示出错误信息并中止脚本的执行同时返回退
出码1。
${#name} 给出name的长度
${name%word} 从name的尾部开始删除与word匹配的最小部分,然后返回剩余部分
${name%%word} 从name的尾部开始删除与word匹配的最长部分,然后返回剩余部分
${name#word} 从name的头部开始删除与word匹配的最小部分,然后返回剩余部分
${name##word} 从name的头部开始删除与word匹配的最长部分,然后返回剩余部分
(注,name为变量名,word为要匹配的字符串)
用法三在处理字符串和未知变量时,是很有用的。

2、[] 中括号:

用法一:通配符扩展:
允许匹配方括号中任何一个单个字符
eg: ls /[eh][to][cm]*
相当于执行 ls /etc /home(若有/eom目录,就相当于会执行ls /etc /home /eom)
注:在mkdir命令下不能扩展
用法二:用于条件判断符号:
[]符号可理解为指向test命令的一个软链接,所以其用法可完全参照test,将test位置替换为
[便可。
eg: if [ "$?" != 0 ] 等价于 if test "$?" != 0
then echo "Executes error"
3、`command` 反引号:`command`与$(command)的含义相同,都是返回当前执行命令的结果 eg: #!/bin/sh
for file in $(ls f*.sh);do
lpr $file
done
exit 0
该例实现了扩展f*.sh给出所有匹配模式的文件的名字。
4、‘string‘ 单引号 和 "string" 双引号双引号:如果想在定义的变量中加入空格,就必须使用单引号或双引号,
单、双引号的区别在于双引号转义特殊字符而单引号不转义特殊字符
eg: $ heyyou=home
$ echo ‘$heyyou‘
$ $heyyou ($没有转义)
eg: $ heyyou=home
$ echo "$heyyou"
$ home (很明显,$转义了输出了heyyou变量的值)
5、$# 它的作用是告诉你引用变量的总数量是多少; $$ 它的作用是告诉你shell脚本的进程号;
$* 以一个单字符串显示所有的脚本传递的参数。等价于$1 $2 $3.......;
[email protected] 与$*基本类似(参见序号7),但在数组赋值时有些不同;
$? 前一个命令的退出码;
$- 显示shell使用的当前选项;
$! 最后一个后台运行的进程ID号。
6、$((...))语法:对括号内的表达式求值 eg:
#!/bin/sh
x=0
hile [ "$x" -ne 10 ];do
echo $x
x=$(($x+1))
done
exit 0
7、shell中几种特殊的参数变量的引用 $1、$2、$3……${10}、${11}、${12}…… :表示脚本传入的的各个参数,注意当需表示两位数以后的
参数时数字要用花括号括起。
[email protected] 列出所有的参数,各参数用空格隔开
$*: 列出所有的参数,各参数用环境变量IFS的第一个字符隔开
8、命令列表: AND列表 statement1 && statement2 && statement3 && …:
只有在前面所有的命令都执行成功的情况下才执行后一条命令
OR列表 statement1 || statement2 || statement3 || …:
允许执行一系列命令直到有一条命令成功为止,其后所有命令将不再被执行
eg:#!/bin/sh
touch file_one
rm -f file_two
if [ -f file_one ] && echo "hello" && [ -f file_two ] && echo " there"
then
echo "in if"
else
echo "in else"
fi
exit 0
上例的输出为:
hello
in else
关于AND列表与OR列表,在逻辑判断中很使用,下面就举一个其最常用的例子:
[ condition ] && command for true || command for false:
当条件为真时,执行commandfor true ,当条件为假时,执行command for false
9、: 冒号:内建空指令,返回值为0 eg: $ :
$ echo $?
$ 0
while: (该语句结构可实现一个无限循环)
10、; 分号: 在 shell 中,担任"连续指令"功能的符号就是"分号" eg:cd ~/backup ; mkdir startup ; cp ~/.* startup/.
11、# 井号:表示符号后面的是注解文字,不会被执行; * 匹配文件名中的任何字符,包括字符串;
? 匹配文件名中的任何单个字符。
~ 代表使用者的 home 目录
12、/ 倒斜线:放在指令前,有取消 aliases(别名) 的作用;放在特殊符号前,则该特殊符号的作用消
失;放在指令的最末端,表示指令连接下一行(使得回车符无效,只起换行作用)
14、! 感叹号:通常它代表反逻辑的作用,譬如条件侦测中,用 != 来代表"不等于" 15、** 次方运算:两个星号在运算时代表 "次方" 的意思 eg:let "sus=2**3"
echo "sus = $sus"
$ sus = 8

时间: 2024-10-04 16:05:45

9、linux的特殊符的相关文章

[性能分析]linux文件描述符(转)

1.什么是文件和文件描述符 Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r--r-- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件.这些文件一般是用一些相关的应用程序创建,比如图像工具.文档工具.归档工具... .... 或 cp工具等.这类文件的删除方式是用rm 命令:2.目录文件在l

Linux 文件描述符问题

昨天解了个bug,关于文件描述符的,这种问题很久之前也遇到过,这次再犯真的不该. 问题是这样的. fopen()打开一个文件,然后做了一些操作,然后函数执行结束...没有调用fclose()导致了,再执行此函数时,系统提示,文件描述符分配完毕. 分析了下: 根据以前的知识储备, 1.linux打开文件描述符的最大个数为1024,根据这次发现, 2.这是针对于单独进程的, 3.是从/proc/{pid}/fd/这个文件夹下可以看到. 4.分配文件描述符是递增的顺序.(看我之前的博客会发现这是那个b

[性能分析]linux文件描述符

1.什么是文件和文件描述符 Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r--r-- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件.这些文件一般是用一些相关的应用程序创建,比如图像工具.文档工具.归档工具... .... 或 cp工具等.这类文件的删除方式是用rm 命令:2.目录文件在l

git在window与linux的换行符问题

1:背景.我win7,后端是win10,使用了TortoiseGit工具.我使用ssh,他使用http.仓库是在linux,使用gitLab管理 2:问题.仓库是总监之前建好的.后端把文件add后push,我clone本地后没有放进编辑器中也没有做任何的修改,马上commit,提示所有文件已修改,打开对比了,只是结尾的换行有修改 3:差异.因为之前没有遇到过这样的问题,不知从何下手,刚开始以为是编码问题,百度谷歌后不知所以然,就从编码到git版本用排除法一一对比,最后发现我们2个人的连接方式不一

Windows和Linux 行尾符(EndOfLine)的区别

不同操作系统,文本文件的行尾符是有区别的. 1. 各系统关于行尾符(End-of-Line)的规定 Unix每行结尾为'\n',Windows系统每行结尾是"\r\n", Mac系统每行结尾是'\r' 2. 概念区分 中文名 英文名 英文缩写 英文解释 C语言中表示 ASCII码 回车 carriage return CR return \n 0x0a 换行 line feed LF new line \r 0x0d 3. 回车与换行来历 在计算机还没有出现之前,有一种叫做电传打字机(

windows和linux中换行符的转换

数据开发平台使用上传脚本报错:保存失败,文件编码格式不正确,请修改文件换行符为Unix终束符! 修改方式:DOS系统下,使用文本编译器另存为,然后选择换行符为unix终束符. 解释: windows 文件的换行符为:[CR][LF] Linux和Unix文件的换行符为:[LF] 有些需要转换使用,如修改或替换安卓andriod的hosts文件,需要保证换行符为Unix形式才能使用. 其中一种办法是在linux系统中重新保存一份文件: 但是:如何在windows系统中,转换成Unix / Linu

[转帖]linux文件描述符文件/etc/security/limits.conf

linux文件描述符文件/etc/security/limits.conf https://blog.csdn.net/fanren224/article/details/79971359 需要多学习了解一下. 文件描述符是什么?和文件句柄有啥区别? 文件描述符是linux/unix操作系统中特有的概念.相当于windows系统中的文件句柄.一个意思不同叫法. Linux系统中, 每当进程打开一个文件时,系统就为其分配一个唯一的整型文件描述符,用来标识这个文件.标准C中每个进程默认打开的有三个文

关于Linux文件描述符的笔记

当某个程序打开文件时,操作系统返回相应的文件描述符,程序为了处理该文件必须引用此描述符.所谓的文件描述符是一个低级的正整数.最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应.因此,函数 scanf() 使用 stdin,而函数 printf() 使用 stdout.你可以用不同的文件描述符改写默认的设置并重定向进程的 I/O 到不同的文件. 首先说什么是文件描述符,它有什么作用? 文件描述符是一个简单的整数,用以标明每一个被

linux的描述符

linux系统每个对像当做文件来处理.这包括输入和输出的过程.linux用文件描述来标识每个文件对象.文件描述符是一个非负整数,可以唯一地标识会话中打开的文件.每个过程一次最多可以有9个文件描述符.出于特殊目的.bash shell保留了最早的3个文件描述符{0,1,2}分别对应{STDIN,STDOUT,STDERR}表示为标准输入.标准输出.标准错误.我们先来一段代码看看 1 #!/bin/bash  2 exec 3>&1                                

Linux 进程描述符 task struct

大家都知道进程,可是知道linux是怎么管理其进程的吗?每一个进程都有一个进程描述符,具体是task_struct结构体存储相关的信息,在linux/sched.h文件里定义,那么我们先看看linux内核3.0版本的task_struct结构体的定义吧(删除了不必要的字段,只保留了重要的字段).同时欢迎大家转载和交流. struct task_struct {       //这个是进程的运行时状态,-1代表不可运行,0代表可运行,>0代表已停止.  volatile longstate;