! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

grep

Linux shell grep 命令用于查找文件里符合条件的字符串。

  1. # code.txt文件内容
  2. username=xiao
  3. age=18
  4. # test.sh文件内容
  5. userinfo=`cat ./code.txt | grep username`
  6. echo $userinfo
  7. user=${userinfo##*=}
  8. echo $user
  9. # 执行脚本
  10. sh test.sh
  11. username=xiao
  12. xiao

image.png

在脚本里调用另一个脚本

1、source
2、.点号
3、sh命令
三者的区别
使用source命令和点号.是等价了,类似于C/C++中的#include预处理指令,都是将指定的脚本内容拷贝至当前的脚本中,由一个Shell进程来执行。使用sh命令来调用另外的脚本和前面两种方法有着本质的区别。使用sh命令则会开启新的Shell进程来执行指定的脚本,这样的话,父进程中的变量在子进程中就无法访问。

  1. . "$(dirnam "$1")/01.sh"
  2. # 相当于是 source ../01.sh

参数传递

$0 为执行的文件名(包含文件路径)

  1. # test.sh 文件
  2. #!/bin/bash
  3. echo "Shell 传递参数实例!";
  4. echo "执行的文件名:$0";
  5. echo "第一个参数为:$1";
  6. echo "第二个参数为:$2";
  7. echo "第三个参数为:$3";
  1. $ chmod +x test.sh
  2. $ ./test.sh 1 2 3
  3. Shell 传递参数实例!
  4. 执行的文件名:./test.sh
  5. 第一个参数为:1
  6. 第二个参数为:2
  7. 第三个参数为:3

$# 传递到脚本的参数个数
$ 以一个单字符串显示所有向脚本传递的参数。
如”$
“用「”」括起来的情况、以”$1 $2 … $n”的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
如”$@”用「”」括起来的情况、以”$1” “$2” … “$n” 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

使用变量

  1. your_name="qinjx"
  2. echo $your_name
  3. echo ${your_name}

删除变量

使用 unset 命令可以删除变量。语法:
unset variable_name

Shell 输入/输出重定向