Shell基础语法整理2

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

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

> ,&>, >&, >> 这四个都是重定向符,分别举例说明。

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中,如果文件不存在则创建。

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

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

{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-f
cat {test111.txt,test222.txt} >test333.txt # 把test111.txt与test222.txt的内容全部追加到test333.txt
cp test333.{txt,txt.bakup} #拷贝test333.txt成test333.txt.backup

{a…z},{0…6}

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 z
echo {0..6} # 0 1 2 3 4 5 6

匿名函数,会将test333.txt的前两行内容赋值给变量line1和line2;

fileline=./test333.txt
{
  read line1
  read line2
}<$fileline

echo $line1
echo $line2

高级操作
在xargs -i中,还可以作为文本的占位符,用来标记输出文本的位置。会把所有txt文件拷贝一份,命名成txt.bak

ls *.txt | xargs -i -t cp {} {}.bak 

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

find . -name "*.sh" -exec rm {} \;

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

var=hellFrank
echo ${var^}           # HelloFrank
echo ${var^^}          # HELLOFRANK

<< 双小于号,称作 here-doc。一般用于给命令提供输入多行内容。比如
如果给here doc 标识符加上双引号或者单引号则会禁止变量替换。比如
如果给here doc 标识符加上双引号或者单引号则会禁止变量替换。比如
再 <<后面添加-,可以忽略TAB空白字符。比如

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

parma=frank
echo ${param:=default} #frank
echo ${test:=default} #default

<<< 三个小于号,称作here string,here doc的变种。比here doc更灵活。例如

tr a-z A-Z <<<"Yes it is a string" # YES IT IS A STRING
name=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

猜你喜欢

转载自blog.csdn.net/mingtiannihaoabc/article/details/104119473