返回顶部
首页 > 资讯 > 精选 >如何在shell中实现奇葩字符
  • 510
分享到

如何在shell中实现奇葩字符

2023-06-09 12:06:47 510人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关如何在shell中实现奇葩字符,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。;; 双分号,用在 case条件语句的结束符。如:case "$v

这篇文章将为大家详细讲解有关如何在shell中实现奇葩字符,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

;; 双分号,用在 case条件语句的结束符。如:

case "$variable" in abc) echo "\$variable = abc" ;; xyz) echo "\$variable = xyz" ;;esac

% 百分号,用于表示取余操作,也用于正则表达式

~  波浪线,表示家目录,等价于$HOME。如 cd ~

~+  表示当前工作目录,等价于$PWD。

~-  表示上一个工作目录,等价于 ..。

|  管道标识符,将上一个命令的输出作为下一个命令的输入,经常用到,没什么好说的。

>|  强制重定向。强制重写已经存在的文件。

||  表示逻辑或操作。

&  让命令在后台运行,例如 command &  一般用于启动后台进程服务。

&&  表示逻辑与操作。

* 星号,主要用于通配符匹配,当然也用于乘法表达式。

\ 主要用于转义特殊字符,比如想转义双引号,可以这样 echo \" 输出 “。

/  文件路径分隔符,比如 /opt/app/projects/ 。当然也用作除法表达式。

. 点号,这个符号作用比较多。 首先可以等价于 source 命令。也可以作为文件名字,在文件名开头,表示该文件是个隐藏文件。 还可以表示当前目录, 比如拷贝某个文件到当前目录 cp /opt/app/a.md . 。如果是两个连续的点则表示上一级目录,比如 cd ..。
最后,点号也是正则表达式的元字符。

"  双引号,双引号里面的变量一般会被解析成赋值的内容。比如

 name=frank echo "hello $name" # hello frank

' 单引号,单引号里面的变量一般不会被解析,比如

 name=frank echo 'hello $name' #hello $name

' 反引号(ESC键下面那个),要跟单引号区分开。反引号里面的内容会被当作指令执行,并将执行的结果赋值给变量。比如:

file=`ls ~`echo $file #家目录下所有文件。

!  感叹号,一般用于取反。比如 != 表示不等。骚操作在终端中执行,可以表示历史指令比如 !-3,将会输出你刚刚输入的指令。但在脚本中不支持该种写法。

**  双星号,算术运算中表示求幂运算。比如

let "a=3**2"echo $a #9

?  问号,表示条件测试;也用作三元运算符。也是正则表达式元字符。

$  美元符,放到变量前面,即引用一个变量的内容,比如:echo $PATH;当然也是正则表达式的元字符。

${} 参数替换。用于在字符串中表示变量值。比如

name=frankecho "hello ${name}" #hello frank

$*,$@ 这两个特殊字符都用于获取传递给脚本的所有参数。当他们被双引号包围时,"$*"会将所有的参数从整体上看做一份数据。而"$@"仍然将每个参数都看作一份数据,彼此之间是独立的。

$#  表示参数个数。

$?  返回最近的一个命令或脚本的退出状态码,正确执行则返回0,否则返回非0。

$$  双美元符, 返回当前脚本的进程号。

() 小括号,命令组,一组圆括号括起来的命令代表一个命令组,以子shell方式运行。同时小括号里面的的变量类似局部变量,外部不能访问。比如

a=123( a=321; )echo "a = $a" # a = 123

还可以用于数组初始化。例如

arr=(ele1 ele2 ele3)echo ${arr[1]} # ele2

{xxx,yyy,zzz} 有人叫花括号扩展,我举几个例子,可能大家就明白了。注意不能有空格。

echo {a,b,c}-{d,e,f} # a-d a-e a-f b-d b-e b-f c-d c-e c-fcat {file1,file2,file3} > merge_file #将三个file的内容一同输入merge_filecp file.{txt,backup} #拷贝file.txt成file.backup

{a..z}  跟上面类似,还是看例子吧。

echo {a..z} # a b c d e f g h i j k l m n o p q r s t u v w x y zecho {0..3} # 0 1 2 3

{}  花括号,表示代码块 ,也用于表示匿名函数。也可以结合重定向符使用。例如:

fileline=~/a.txt{ read line1 read line2 } < $fileline echo $line1 echo $lien2

会将a.txt的前两行内容赋值给变量line1和line2;

骚操作在xargs -i中,还可以作为文本的占位符,用来标记输出文本的位置。

比如 ls *.txt | xargs -i -t cp {} {}.bak 会把所有txt文件拷贝一份,命名成txt.bak

{} \;  表示路径名字。一般跟find命令一起使用。例如 find . -name "*.sh" -exec rm {} \;找出所有sh脚本,然后删除。注意{} 和 \ 之间的空格,分号必须存在。

[]  中括号,用于在里面写判断表达式。也可以当作数组用。当然也是正则表达式元字符。

[[]]  双中括号,也用于在里面写判断表达式,比上面但中括号更灵活。

$[]  计算整数表达式,已经不推荐使用。例如

a=3;b=7;echo $[$a+$b] # 10

(())  双小括号, 计算整数表达式,推荐使用。如

a = 23(( a++ ))echo "a (after a++) = $a" # 24

> ,&>, >&, >>  这四个都是重定向符,分别举例说明。
cat ~/a.txt >a.log  将文件a.txt的内容输出到文件a.log中去,如果文件存在则覆盖;
command &>filename 重定向command的标准输出(stdout)和标准错误(stderr)到文件filename中,一般用于启动进程脚本;
command >&2 把command的标准输出(stdout)重定向到标准错误(stderr)中;
cat ~/a.txt >> a.log  把a.txt的输出以追加得方式输入到文件a.log中,如果文件不存在则创建。

-  短横线,可用于参数选择 例如 ls -al。 也可以表示上一个工作目录,例如 cd -。当然也是数学运算符,用于表示减法操作。

=  等号,数学运算符,赋值操作。 例如

a=28echo $a

也可以用于表示比较操作,例如,if [ "$a" = "$b" ]  注意等号左右两侧要有空格。

#  井号,一般用于注释语句前面,表示该条语句是注释。也是正则表达式的元字符。

注意:

脚本的第一行#!/bin/bash 不作为注释,在双引号或者单引号以及转义字符之后的也不会作为注释符使用。例如 

echo "The # here does not begin a comment." echo 'The # here does not begin a comment.' echo The \# here does not begin a comment.

骚操作 可以做进制转换,例如

 echo $((2#101)) #5 echo $((8#101)) #65 echo $((10#101)) #101

,  逗号,用于连接一连串的数学表达式,这串数学表达式均被求值,但只有最后一个求值结果被返回。例如:

# Set "a = 9" and "t2 = 15 / 3"let "t2 = ((a = 9, 15 / 3))"

也可以用于连接字符串,比如 echo {a,b}/test  输出 a/test b/test

骚操作  用在变量引用中,表示首字母小写,如果是两个逗号,则表示全部小写。例如

 a="AFrank" echo ${a,} #aFrank echo ${a,,} #afrank

+ 数学运算符,表示加操作。也是正则表达式元字符。

骚操作 用于设置变量值。使用方式 ${parameter+alt_value}  如果变量 parameter 设置了值,则使用 alt_value 的值,否则使用空字符。

举个例子,感受一下

#param1 not seta=${param1+xyz}echo "a = $a"  # a =#parma2 set nullparam2=a=${param2+xyz}echo "a = $a"  # a = xyzparam3=123a=${param3+xyz}echo "a = $a"  # a = xyz

注意 配合冒号使用时会有不同。举个例子,继续感受一下

a=${param4:+xyz}echo "a = $a"  # a =param5=a=${param5:+xyz}echo "a = $a"  # a =#Different result from a=${param5+xyz}param6=123a=${param6:+xyz}echo "a = $a"  # a = xyz

^  用于正则表达式。

骚操作  用于大小写转化。看下面的例子。

var=hellFrankecho ${var^}   # HelloFrankecho ${var^^}   # HELLOFRANK

<< 双小于号,称作 here-doc。一般用于给命令提供输入多行内容。比如

tr a-z A-Z <<EOF > one > two > three > EOF

输出:

ONE  TWO  THREE

默认的,here doc里面的变量会进行替换。比如

cat << EOF > Working dir $PWD > EOF

输出:Working dir /home/frank

如果给here doc 标识符加上双引号或者单引号则会禁止变量替换。比如

cat << "EOF" > Working dir $PWD > EOF

输出:Working dir $PWD

骚操作

再 <<后面添加-,可以忽略TAB空白字符。比如

tr a-z A-Z <<-EOF > one > two > three > EOF

输出:ONE  TWO  THREE

<<< 三个小于号,称作here string,here doc的变种。比here doc更灵活。例如tr a-z A-Z <<<"Yes it is a string" # YES IT IS A STRINGname=frank# 双引号里面会解析变量tr a-z A-Z <<<"Yes i'm $name" # YES I'M FRANK# 单引号里面不解析变量tr a-z A-Z <<<'Yes i\'m $name' # YES I'M $NAME

: 冒号,表示空,什么都不做,但是有返回值,返回值为0(即true)
例如:: ; echo $? 输出0。 $? 的意思就是返回上条指令的状态。
利用此特性可以作为 while 的无限循环条件,也可以作为 if 分支的占位符。

比如

while : #same as while truedo operation-1 operation-2 ... operation-ndone

或者

if conditionthen : # Do nothing and branch aheadelse  # Or else ... take-some-actionfi

除此之外还可以结合重定向符号使用,将文件内容清空,但是不改变文件权限,如果不存在则会自动创建。

: > data.xxx # File "data.xxx" now empty.

等价于 cat /dev/null >data.xxx 如果以追加方式的重定向,则对文件不构成任何修改。同样如果文件不存在也会新建一个。例如 : >> data.xxx 。

注意 这个只能在普通文件中使用,不能在管道,符号链接和其他特殊文件中使用;

你也可以作为域分隔符,比如环境变量$PATH中,或者passwd中,都有冒号的作为域分隔符的存在;例如
usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/games

骚操作 设置默认值,如果param没有设置,则使用默认值,例如

parma=frankecho ${param:=default} #frankecho ${test:=default} #default

你也可以将冒号作为函数名,不过这个会将冒号的本来意义转变,所以不要这么搞。

:(){ echo "The name of this function is colon"}

关于如何在shell中实现奇葩字符就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何在shell中实现奇葩字符

本文链接: https://lsjlt.com/news/256030.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何在shell中实现奇葩字符
    这篇文章将为大家详细讲解有关如何在shell中实现奇葩字符,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。;; 双分号,用在 case条件语句的结束符。如:case "$v...
    99+
    2023-06-09
  • shell 里面的奇葩字符实现
    在我接触过的编程语言里面,最奇葩的两个就属 javascript 和 Shell 了。因为它们有着太多的语法糖跟特殊字符,总是能够让你措手不及,并且编程习惯也跟java 和 python 等语言大相径庭。总之,千万不要因...
    99+
    2022-06-04
    shell 奇葩字符 shell 字符
  • 如何在Shell中分割字符串
    这篇文章主要介绍“如何在Shell中分割字符串”,在日常操作中,相信很多人在如何在Shell中分割字符串问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在Shell中分割字符串”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-09
  • shell如何实现字符串替换
    小编给大家分享一下shell如何实现字符串替换,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!字符串替换${string//pat...
    99+
    2024-04-02
  • Shell字符串截取如何实现
    这篇文章主要讲解了“Shell字符串截取如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell字符串截取如何实现”吧!Shell 截取字符串通常有两种方式:从指定位置开始截取和从指...
    99+
    2023-06-09
  • shell如何实现字符串操作
    小编给大家分享一下shell如何实现字符串操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!代码如下:工作中字符串操作举例 filename='/home...
    99+
    2023-06-09
  • 如何在Shell中使用特殊字符
    这期内容当中小编将会给大家带来有关如何在Shell中使用特殊字符,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、;分号连续运行命令# ifdown eth0;ifup et...
    99+
    2023-06-09
  • Shell脚本如何实现查找字符串中某字符最后出现的位置
    这篇文章将为大家详细讲解有关Shell脚本如何实现查找字符串中某字符最后出现的位置,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需要对字符串查找其中某个字符最后出现的位置,这个在PHP (strrpos)...
    99+
    2023-06-09
  • 如何在shell 中使用分割符来分割字符串
    这期内容当中小编将会给大家带来有关如何在shell 中使用分割符来分割字符串,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、对于不包含空格的字符串,使用下面方法方法一#!/bin/bashstring=...
    99+
    2023-06-09
  • Shell中怎么实现字符串反转
    这篇文章主要讲解了“Shell中怎么实现字符串反转”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell中怎么实现字符串反转”吧!在做关键词清洗过程中,需要将一类不符合某个字结尾的词过滤出...
    99+
    2023-06-09
  • 如何在 Django 中实现实时 shell?
    Django 是一个广泛使用的 Python Web 框架,许多开发者使用 Django 来快速构建高质量的 Web 应用程序。在 Django 中,我们可以使用 Django shell 来与应用程序进行交互,但是默认情况下,Django...
    99+
    2023-07-08
    django 实时 shell
  • shell如何匹配字符串中的数字
    在shell中,可以使用正则表达式来匹配字符串中的数字。可以使用grep命令来进行匹配,具体的语法如下:```shellgrep -...
    99+
    2023-09-26
    shell
  • 如何在Shell中统计字符串中单词的个数
    这篇文章给大家介绍如何在Shell中统计字符串中单词的个数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。方法一:[linux@host ~]# echo 'one two...
    99+
    2023-06-09
  • VBS字符串如何在内部实现
    小编给大家分享一下VBS字符串如何在内部实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!VBS 是基于微软的 ActiveX/COM 技术实现的,而 COM 对...
    99+
    2023-06-08
  • shell字符串匹配的实现
    一、简介       Bash Shell提供了很多字符串和文件处理的zrcfONEJA命令。如awk、expr、grep、sed等命令,还有文件的排序、合并和分割等一...
    99+
    2022-06-04
    shell字符串匹配
  • linux中shell如何实现字母转换
    这篇文章给大家分享的是有关linux中shell如何实现字母转换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。#!/bin/sh #----------------------------------------...
    99+
    2023-06-13
  • 如何实现在Shell提示符中显示Git分支名称
    本篇内容介绍了“如何实现在Shell提示符中显示Git分支名称”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Git 的好处之一就是把代码的分...
    99+
    2023-06-09
  • 怎么在Shell中拼接字符串
    怎么在Shell中拼接字符串?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 字符串声明概述字符串的基本操作脚本 1# 声明字符串str01="str...
    99+
    2023-06-09
  • python 实现查找某个字符在字符串中
    把字符串'aenabsascd'中的字符出现的次数统计出来,并以字典形式输出方法一: 1 def count_str(str): 2 dic={} 3 for i in str: 4 dic[i]=str...
    99+
    2023-01-30
    字符串 字符 python
  • Shell中实现字符串反转方法分享
    在做关键词清洗过程中,需要将一类不符合某个字结尾的词过滤出来,思路是把这一批词按最后一个字排序,于是想到了先把这些词反转一下,如把12345转为54321,好像以前在夜息的文章里看过用shell可以实现,就...
    99+
    2022-06-04
    字符串 方法 Shell
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作