天天看点

shell里面的一些特殊符号

作者:SuperOps
shell里面的一些特殊符号

特殊符号在linux shell编程里非常常见

shell里面的一些特殊符号

各种符号说明

当你编写 Linux shell 脚本时,你会经常用到各种符号来完成不同的操作。下面是一些常用的 Linux shell 编程符号及其说明:

  1. #:井号用于注释,可在脚本中添加注释,提高代码可读性。
  2. !:感叹号用于执行历史命令,例如 !ls 将会执行最近的以 ls 开头的命令。
  3. $:美元符号用于引用变量,例如 $HOME 将会展开为当前用户的家目录。
  4. *:星号表示通配符,用于匹配任意字符,例如 *.txt 将会匹配所有以 .txt 结尾的文件。
  5. ?:问号也是一个通配符,用于匹配单个字符,例如 file?.txt 将会匹配 file1.txt、file2.txt 等文件。
  6. []:方括号也是一种通配符,用于匹配一个字符集中的任意字符,例如 [abc] 将会匹配字符 a、b 或 c。
  7. {}:花括号用于构建命令序列,例如 cp {file1,file2}.txt dir/ 将会拷贝 file1.txt 和 file2.txt 到 dir/ 目录中。
  8. ():圆括号用于创建子 shell,例如 (ls; echo "done") 将会在子 shell 中执行 ls 命令,并在完成后输出 done。
  9. |:管道符用于将一个命令的输出传递给另一个命令作为输入,例如 ls | grep "txt" 将会列出当前目录下所有以 .txt 结尾的文件。
  10. > 和 >>:大于号和双大于号用于将命令的输出重定向到一个文件或设备中,例如 ls > files.txt 将会将 ls 命令的输出保存到 files.txt 文件中。>> 与 > 的区别在于,它会将命令的输出追加到文件末尾而不是覆盖文件。
  11. <:小于号用于将文件内容作为命令的输入,例如 sort < input.txt 将会将 input.txt 文件内容作为 sort 命令的输入。
  12. &:和号用于将命令放入后台执行,例如 ./myprogram & 将会在后台执行 myprogram 程序。
  1. ;:分号用于将多个命令放在同一行上,例如 command1; command2 将会先执行 command1,再执行 command2。
  2. && 和 ||:双与号和双或号用于执行条件命令,例如 command1 && command2 将会先执行 command1,只有在 command1 执行成功后才会执行 command2,而 command1 || command2 则相反,只有在 command1 执行失败后才会执行 command2。
  3. $():美元符号加括号用于执行子命令,并将其输出作为变量的值,例如 files=$(ls) 将会将当前目录下的文件列表保存到 files 变量中。
  4. " 和 ':双引号和单引号用于引用字符串,其中双引号会展开变量,而单引号则不会,例如 echo "My home directory is $HOME" 将会输出 My home directory is /home/user,而 echo 'My home directory is $HOME' 则会输出 My home directory is $HOME。
  5. \:反斜杠用于转义字符,例如 \n 表示换行符,\t 表示制表符等。
  6. ::冒号用于定义空命令,例如 : 就是一个空命令,它不会做任何事情。
  7. source 和 .:source 命令和 . 符号用于执行脚本文件,例如 source myscript.sh 或者 . myscript.sh 将会执行 myscript.sh 脚本文件。
  8. ctrl+c 和 ctrl+z:ctrl+c 组合键用于终止当前正在运行的命令,而 ctrl+z 组合键用于将当前正在运行的命令挂起到后台,并返回命令提示符。

通过一个脚本示例演示各种特殊符号用法

#!/bin/bash

# 这是一个演示Shell特殊符号用法的脚本

# echo命令用于输出文本
echo "Hello World!"

# 井号(#)用于注释代码行
# 这行代码不会被执行
echo "This line will not be printed"

# $符号用于取变量值
name="John"
echo "My name is $name"

# 双引号用于引用字符串,可以包含变量值和转义字符
echo "The current working directory is: \"$PWD\""

# 单引号用于引用字符串,不会解析变量值和转义字符
echo 'The current user is: $USER'

# 反引号用于执行命令并将结果赋值给变量(注意是反引号,不是单引号)
date=`date +%Y-%m-%d`
echo "Today's date is: $date"

# 美元符号和花括号用于扩展变量
echo "My home directory is: ${HOME}"

# 尖括号用于重定向输入/输出流
echo "This will be written to a file" > output.txt
cat < input.txt

# 管道符用于将一个命令的输出传递给另一个命令的输入
ls -al | grep "file.txt"

# 分号用于分隔多个命令行
echo "Command 1"; echo "Command 2"

# 双竖线用于逻辑或运算
if [ $name = "John" ] || [ $name = "Jane" ]; then
  echo "Hello John or Jane"
fi

# 双和符号用于逻辑与运算
if [ -f file.txt ] && [ -r file.txt ]; then
  echo "The file exists and is readable"
fi

# 双圆括号用于算术运算和比较
if (( 2 + 2 == 4 )); then
  echo "Math is working correctly"
fi

# 方括号用于测试表达式
if [ -d /usr/local/bin ]; then
  echo "The directory /usr/local/bin exists"
fi

# 双中括号用于高级测试表达式
if [[ $name == J* ]]; then
  echo "The name starts with J"
fi

# 反斜杠用于转义字符
echo "This is a \"quoted\" string"

# 命令替换用于执行命令并将输出插入到命令行中
echo "The current date is $(date +%Y-%m-%d)"           

编写一个rpm检查是否安装的脚本示例

```bash
#!/bin/bash
# rpm-check.sh

# 查询rpm文件的描述、列表和是否可以安装。
# 将输出保存到文件中。
# 
# 这个脚本演示了如何使用代码块。

SUCCESS=0
E_NOARGS=65

if [ -z "$1" ]
then
  echo "用法: `basename $0` rpm文件"
  exit $E_NOARGS
fi  

{ # 开始代码块。
  echo
  echo "档案描述:"
  rpm -qpi $1       # 查询描述信息。
  echo
  echo "档案列表:"
  rpm -qpl $1       # 查询列表。
  echo
  rpm -i --test $1  # 查询是否可以安装。
  if [ "$?" -eq $SUCCESS ]
  then
    echo "$1 可以安装。"
  else
    echo "$1 无法安装。"
  fi  
  echo              # 结束代码块。
} > "$1.test"       # 将代码块中的所有输出重定向到文件中。

echo "rpm测试结果保存在文件 $1.test 中"

# 有关选项的说明,请参阅rpm手册。

exit 0
```           

总结

linux shell脚本编写过程中需要我们了解各种特殊符号的含义和用法,这样才能写好各种shell脚本,在日常的运维工作中更加轻松,感谢阅读。我每次文章结尾都会推荐我阅读过的好书给大家,希望大家进一步学习。

shell脚本范例好书推荐 ¥79 购买