Bash Shell知识合集
1. chmod命令
创建一个bash shell脚本 hello.sh
~script $ touch hello.sh
脚本创建完成后并不能直接执行,我们要用chmod命令授予它可执行的权限:
~script $ chmod 755 hello.sh
授权后的脚本可以直接执行:
~script $ ./hello.sh
2.指定运行脚本的解析器shebang
在脚本开头加上#!/usr/bin/env bash
, 表示当前脚本会用bash解析器来执行脚本:
~script $ ./hello.sh
如果没有指定的话,那么上面这一句会用terminal(终端)默认的脚本解析器来解析,可能会遇到执行不了的情况,因为不同的脚本语言的规则并不尽相同,遇到这种情况可以在执行时指定解析器:
~script $ bash hello.sh
小知识:
在执行脚本时,./
为什么要加上呢?是因为在类Unix系统上(Mac os 、linux)的terminal的脚本解析器执行脚本时,会在好几个路径上去寻找这个脚本文件, 但偏偏它不包括当前terminal打开的路径,所以我们通过./
告诉它,我们要执行的脚本文件在当前目录下。
类似的还有:
#!/bin/bash
#!/usr/bin/env python
#!/usr/bin/env node
3.在脚本中创建和使用变量
4.脚本参数
5.在脚本中执行基本脚本命令或系统命令
6.bash shell的条件语句
7.while循环
8.for循环
9.break和continue关键字在循环体中的使用
10.读取系统变量
11.函数
12.管道
13. 文件读写操作
14.sleep命令
delay.sh:
#!/usr/bin/env bash
DELAY=$1
if [ -z $DELAY ];then # 检查是不是没有传DELAY
echo "You must supply a delay"
exit 1
fi
echo "going to sleep for $DELAY"
sleep $DELAY # sleep
echo "we are awake now"
exit 0
我们执行一下并观察脚本退出状态:
script % ./delay.sh
You must supply a delay
script % echo $?
1
script % ./delay.sh 5
going to sleep for 5
we are awake now
script % echo $?
0
我们还可以加个&,把脚本程序放后台运行:
script % ./delay.sh 5 &
[1] 18958
script % going to sleep for 5
script %
script % we are awake now
[1] + done ./delay.sh 5
15.观察程序状态
#16.正则表达式的使用例子
valid.sh:
#!/usr/bin/env bash
VALID=0
while [ $VALID -eq 0 ]
do
read -p "input food name & price:" FOOD PRICE
if [[ (-z $FOOD) || (-z $PRICE) ]];then
echo food name and price are not provided
continue
elif [[ ! $FOOD =~ ^[A-Za-z]+$ ]];then
echo "food name is not valid!"
continue
elif [[ ! $PRICE =~ ^[0-9]+$ ]];then
echo "price is not valid!"
continue
fi
VALID=1
done
echo $FOOD $PRICE
exit 0
script % ./valid.sh
input food name & price:apple 55
apple 55
温馨提示:
下面的表达式与括号是不需要有空格分隔的。
((表达式))
[[表达式]]
if [[ (-z $FOOD) || (-z $PRICE) ]]
等价 if [ -z $FOOD ] || [ -z $PRICE ]
更多bash脚本知识请参考官方文档
结束