shell基本命令

因为公司里有个项目改完ui层后,需要运行很多命令才能讲ui层打包并重启项目,那些命令一个一个的去复制感觉有些麻烦,所以想弄个shell脚本来解决这个问题。

1. Hello World!

脚本
#!/bin/bash  // #!是一个约定,告诉系统这个脚本需要何种解释器来执行  
echo "Hello World!" //echo命令用于向窗口输出文本。
执行

将上面的代码保存为test.sh,并cd到相应目录:
chmod +x ./test.sh,使脚本具有执行权限;
./test.sh,执行脚本。

注意

必须写成./test.sh,否则系统会从PATH中寻找;如果使用/bin/sh作为解释器,第一行可以省略。

2. read命令

#!/bin/bash

echo "Hello, what is your name?"
read PERSON
echo "Hello, $PERSON!" #此处必须是双引号,单引号不会使用变量的值

通过read命令从stdin获取输入并赋值给PERSON变量,最后在stdout上输出。

3. 定义变量

#!/bin/bash

myUrl="http://www.zhangshuang.top"
myName="张爽"
myAge = "26" #识别不出来,不能有空格

echo "My name is ${myName}"
echo "My blog site is $myUrl"
echo "I'm ${myAge} years old" #这句话会报错

变量名在使用的时候,前面必须有$符号,可选添加{% raw %}{}{% endraw %}表示变量边界。从新定义变量跟第一次定义变量写法一样。

4. readonly 只读变量

#!/bin/bash
myUrl="http://www.zhangshuang.top"
readonly myUrl
myUrl="http://zhangshuang.top" #此句运行时会报错,提示该变量为只读变量

5. unset 删除变量

#!/bin/bash
myUrl="http://www.zhangshuang.top"
unset myUrl
echo "${myUrl}" #此句运行时会报错,提示找不到变量

myUrl="http://www.zhangshuang.top"
readonly myUrl
unset myUrl #报错,只读变量无法删除
echo "${myUrl}"

6. 获取字符串长度

#!/bin/bash
url="http://www.zhangshuang.top"
echo "url length is $#url" #${#url}获取字符串length

7. 提取字符串

#!/bin/bash
url="http://www.zhangshuang.top"
echo "${url:1:4}" #从第二个字符到第五个字符(索引从0开始)

8. if…else

if [ $PERSON == "shuang" ] #注意必须有空格
then
    echo "My name is ${myName}" #缩进可以没有,有的话可读性高一些
    echo "My blog site is ${myUrl}"
    echo "I'm ${myAge} years old"
fi #表示结束

9. 完成一个命令后再执行另一个命令

#!/bin/bash
starttime=$(date +%s) #获取开始执行脚本的时间毫秒数

cd /usr/Hyg #进入项目路径
output=`docker rm -f hygui` #通过output使得该命令执行完后再执行下个命令
output=`docker rmi hyg-ui`
output=`mvn clean package -pl UI docker:build`
output=`docker run -d -h="hygui" -it -p 8088:80 --link`

10. 计算时间差

#!/bin/bash
starttime=$(date +%s) #获取开始执行脚本的时间毫秒数

# date +%Y-%m-%d获取当前日期
# 脚本内容
# 脚本内容

endtime=$(date +%s) #获取开始执行脚本的时间毫秒数
interval=`expr ${endtime} - ${starttime}` #计算项目运行时间

echo "INFO  generated in ${interval} s" #输出时间差