闪电入门shell脚本(一)

 *** 付出什么你就得到什么,如果你付出是最大的努力,你就可以获得最好的报酬。

你只要去写下第一行shell,你就会发现它真的不是很难!去写下第一段自己的脚本吧!哪怕是自己输出一个hello world。

解释器

脚本第一行包含解释器的路径,用于指定shell用什么解释器执行

常用的有bash sh

新建一个脚本 script.sh

#!/bin/bash
# 注意上面#!和解释器之间不能有空格  
whoami 

修改权限

chmod a+x script.sh

脚本执行方式

bash script.sh
./script.sh      # 已经增加可执行权限可使用这个方法

输出 & 重定向输出

echo -n "my user:"        # -n 选项可输出不带换行的文本
whoami
echo -e "hello world!/n"    # -e 启用反斜线转义 常常配合/n新行 等转义符合使用

# 输出重定向       将文件内容清除,添加{inset}
echo "{inset}"  > init.d
# 输出追加重定向   向文件后面追加{inset}
echo "{inset}"  >> init.d

变量

# 数字 
PI=3.14  # 等号左右不要有空格
# 字符串 
name="jiafeng"
# 使用变量  下面两种都可以,但建议使用第一种,其他就不做介绍了。
# 字符串可以使用加号拼接 ${name}+${name} 
echo ${name}
echo $name

判断语句

# if else elif
if [ command ]; then
    符合判断执行的语句
fi
###### 注意空格 if 空格 [空格 command 空格];
if [ command ]; then
    语句3
elif [ command2 ]; then
    语句2
else
    语句1
fi  

如果忘记在语句中加入空格,会报语法错误,记得检查。

评估数值

#!/bin/bash
age=18
if [ ${age} -lt 20 ]; then
 echo "age < 20; -lt 代表小于"
fi
判断数值的方式
-gt (大于 >)
-ge (大于或等于 >=)
-lt (小于 <)
-le (小于或等于 <=)
-eq (等于)
-nq (不等于)

评估字符串

#!/bin/bash
my_name="jiafeng"
name1="jiafeng"
name2="jiaXiaoFeng"
# ## 比较两字符串是否相等
if [ ${my_name} == ${name2} ]; then
  echo "${my_name} == ${name2}"
elif [ ${my_name} == ${name1} ]; then
  echo "${my_name} == ${name1}"
fi
判断字符串方式
&& ()
|| ()
== (相同)
!= (不相同)
-n (字符串长度不为空)
-z (字符串长度为空)

评估文件

#!/bin/bash
file_name="init.d"
if [ -f ${file_name} ]; then
  echo "init.d Exist"
else 
  echo "init.d Not Exist"
fi
判断文件方式
#### 如果符合条件,则f返回真
-e 文件存在
-f 普通文件 并非目录或设备文件
-s 文件大小不为空
-d 目录
-r 具备读权限
-w 具备写权限
-x 具备可执行文件

常用$用法

#!/bin/bash

echo -e "\$0 ="$0    # shell脚本的名称
echo -e "\$1 ="$1    # shell脚本第一个参数
echo -e "\$2 ="$2    # shell脚本第二个参数

pwd 
echo -e "\$? = "$?   # pwd 命令成功返回0 

阶段实战

eg:检查备份并增加新内容脚本

#!/bin/bash
# bak
FLAG="bak"
FILE_NAME="init.d.bak"

# 如果输入的第一个参数是bak则需要备份
if [ $1 == ${FLAG} ];then
   # 检查备份文件是否存在
  if [ -f ${FILE_NAME} ];then
    echo "init.d.bak File Exist"
  else
    echo "init.d.bak File not Exist"
    cp init.d init.d.bak  # copy init.d
  fi
fi

# 在init.d 末尾增加一段文字
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
" >> init.d

通过下面的输出我们可以看到,执行脚本之后,进行了备份,并将echo重定向输出到了init.d文件的末尾。

Jia Feng

我喜欢的东西很贵,想去的地方很远,朝着目标前进。虽然苦,但是我还是会选择那种滚烫的人生

`