Bash
参考了简书-Bash
Basics
- Shell本身就是在OS和用户之间的一个命令解释器
- 起手
#!/bin/bash
选择bash作为解释器 - 可以直接
bash hello.sh
或者先赋予可执行权限chmod a+x ./hello.sh
然后直接./hello.sh
- 变量可以直接定义(类似Python)但是注意“=”左右不能有空格(类似bashrc嘛)
- 本质上变量都是字符串
- 只有当变量为纯数字的时候才可以被认为是“数字变量”,否则都是字符串
d=${c/BB/12}
可以替换c中的BB为12- 注意数字变量和字符变量的区别
- 数字变量用
$a -ge $b
这样的模式来比较 - 字符串变量用
$a = $b
这样的链接
- 数字变量用
- 引用变量用
${my_var}
大括号也可以不加 - 单引号内部的内容会被全部输出(不会带转义)但是双引号之间的可以
- echo出一个变量要么不用引号要么双引号
-
${var:-DEFAULT}
如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 * - 条件语句
if [ condition1 ]
then
command1
elif [ condition2 ]
command2
else
commandN
fi
- 循环语句
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
while [ condition ]
do
command
done
- 数组
arr=(1 2 3 5 8 13)
total={#arr[*]}
echo "Num of Elements:"${total}
echo "Array Values:"
for var in ${arr[*]}; do
printf "%d " ${var}
done
echo "Array Value with Index"
for key in ${!arr[*]}; do
printf "%d: %s\n " ${key} ${arr[${key}]}
done
- 循环,range
for i in (sed 0 ${END); do echo ${i}; done
for ((int i; i<10; i++)) do
echo $i
done
- 遍历某文件夹下的文件
for filename in ./*.mp3; do
echo $filename
done
字符串
- ${#string} $string的长度
- ${string:position} 在$string中, 从位置$position开始提取子串至屁股
- ${string:position:length} 在$string中, 从位置$position开始提取长度为$length的子串
- ${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring
- ${string//substring/replacement} 使用$replacement, 来代替最后一个匹配的$substring
expr match $string "\(re\)"