本文总结Linux bash的常见用法,作为Cheat sheet使用。
命令行参数
第一行!#/bin/bash
为释伴(shebang)
#!/bin/bash
cp $1 $2
echo "Copy done"
$0
为文件名$1
–$9
为参数$#
为参数量$$
当前bash进程ID$USER
$HOSTNAME
$PATH
,用:
间隔
变量名
- 不加引号:只处理第一个单词
- 单引号:字面量,同Python
r'...'
- 双引号:会根据变量进行替换
#!/bin/bash
dir=../
ls $dir
var=Hello World
# -bash: World: command not found
var='Hello World'
echo $var # Hello World
newvar='More $var'
echo $newvar # More $var
newvar="More $var"
echo $newvar # More Hello World
因此如果要在多条指令中传多个同样的参数,那么可以用单引号括起来声明变量后传入。
命令替换
用$(...)
进行书写,括号里内容会直接执行
myvar=$( ls /etc )
echo $myvar
# Documents Desktop ...
变量导出
如果变量需要在另外的bash文件中用,则需通过export
导出
#!/bin/bash
# demonstrate variable scope 1.
var1=blah
export var1
./script2.sh
算术表达式
用let <expr>
语句或者$((...))
#!/bin/bash
let "a = 5 + 4"
echo $a # 9
let "a = $1 + 30"
echo $a # 30 + first command line argument
b=$(( $a + 3 ))
echo $b
条件分支
#!/bin/bash
# Basic if statement
if [ $1 -gt 100 ]
then
echo Hey that\'s a large number.
pwd
fi
date
Operator | Description |
---|---|
! EXPRESSION | The EXPRESSION is false. |
-n STRING | The length of STRING is greater than zero. |
-z STRING | The lengh of STRING is zero (ie it is empty). |
STRING1 = STRING2 | STRING1 is equal to STRING2 |
STRING1 != STRING2 | STRING1 is not equal to STRING2 |
INTEGER1 -eq INTEGER2 | INTEGER1 is numerically equal to INTEGER2 |
INTEGER1 -gt INTEGER2 | INTEGER1 is numerically greater than INTEGER2 |
INTEGER1 -lt INTEGER2 | INTEGER1 is numerically less than INTEGER2 |
-d FILE | FILE exists and is a directory. |
-e FILE | FILE exists. |
-r FILE | FILE exists and the read permission is granted. |
-s FILE | FILE exists and it’s size is greater than zero (ie. it is not empty). |
-w FILE | FILE exists and the write permission is granted. |
-x FILE | FILE exists and the execute permission is granted. |
- and – &&
-
or –
#!/bin/bash
# case example
case $1 in
start) # pattern 1
echo starting
;; # needed!
stop)
echo stoping
;;
restart)
echo restarting
;;
*)
echo don\'t know
;;
esac # needed!
循环
#!/bin/bash
# Basic while loop
counter=1
while [ $counter -le 10 ]
do
echo $counter
((counter++))
done
names='Stan Kyle Cartman'
for name in $names
do
echo $name
done
for value in {1..5}
do
echo $value
done
echo "All done"
终端输入
# & means run in backstage
# nohup means not stopping running after the terminal is dead
# > means redirect output to file
$ nohup ./run.sh & > out.log
# show output on the screen and also output to file
$ ./run.sh | tee out.log
参考资料
- Bash Scripting Tutorial, https://ryanstutorials.net/bash-scripting-tutorial/
本文地址:H5W3 » linux Bash指令速查