simplify the life

shell

变量

基础

# 定义变量,不需要加 $。变量名和等号之间不能有空格
name='fish'

# 变量引用,推荐后者
echo $name
echo ${name}

# 删除变量,变量被删除后不能再次引用
unset name

字符串

字符串可以用单引号,可以用双引号,甚至可以不用引号

单引号:

  • 单引号里的任何字符都会原样输出,单引号字符里的变量是无效的
  • 单引号字符串中不能出现一个的单引号(对单引号使用转义符也不行),但可成对出现,作为字符串拼接使用
str=world 

# 变量无效
echo 'hello $str' # -> hello $str

# 单引号字符串里 单引号 成对出现,作为字符串拼接
echo 'hello '$str'' # -> hello world

双引号:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
str=world 

# 可以引用变量
echo "hello $str" # -> hello world

# 可以有转义字符
echo "hello \"\"" # -> hello ""

其他操作:

str="abcd"

# 获取字符串长度
echo ${#str}   # -> 4

# 提取子字符串
echo ${str:1:3} # -> bcd

数组

bash 只支持一维数组

# 数组定义,空格分割
animals=("dog" "cat")

# 或者
fruits[0]="apple"
fruits[1]="banana"

# 读取数组
echo ${animals[0]} # -> dog
echo ${fruits[1]} # -> banana

# 使用 @ 符号可以获取数组中的所有元素
echo ${animals[@]} # -> dog cat

# 获取数组长度
echo ${#animals[@]} # -> 2
echo ${#fruits[1]} # -> 6(本质是获取 banana 长度)

Shell 参数传递

我们在执行 Shell 脚本的时候,可以向脚本传递参数

# $0 为执行的文件名(包含路径),$1 开始为传递的参数
echo $0 $1 $2

执行命令:

sh ./i.sh hello world
# 打印 ./i.sh hello world

其他:

echo $# # 参数个数

# 遍历所有参数
for i in "$*"; do 
  echo $i 
done
# hello world

for i in $*; do 
  echo $i 
done
# hello 
# world

for i in "$@"; do 
  echo $i 
done
# hello 
# world

for i in $@; do 
  echo $i 
done
# hello 
# world

输入/输出重定向

# 希望执行某个命令,但又不希望在屏幕输出结果
$ command > /dev/null

# 希望屏蔽 stdout 和 stderr
$ command > /dev/null 2>&1

其他参考

posted on 2022-12-07 14:41  lessfish  阅读(24)  评论(0编辑  收藏  举报

导航