source.list Try to write shell

其实这也是自己懒得的动手修改Ubuntu的源列表,而Ubuntu又不像centos那样可以只用一行就可以更新源文件
这个脚本写来其实也就是把自己原本要输入的命令让脚本自己去执行,解放双手

  1. 备份源
  2. 写源

主要的就是实现这两个操作

下面就是实现的代码的步骤,都有详细的注释

#!/bin/bash是指此脚本使用/bin/bash来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径

代码中复用的变量:

file="/etc/apt/sources.list"
backfile="/etc/apt/sources.list.back"

备份原有sources.list文件,防止写进源不能使用后果

cp $file $backfile

判断back文件是否存在 执行是否执行备份命令:cp $file $backfile

if [[ ! -f "$backFile" ]]; then  
 cp $file $backfile
 echo 'backup file ok'
else  
 echo 'File existence'
fi

要写的更新源包装成一个数组list,写文件时循环读取

list=(
'deb https://mirrors.aliyun.com/ubuntu/ xenial main restricted'
'deb https://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted'
'deb-src https://mirrors.aliyun.com/ubuntu/ xenial universe'
'deb-src https://mirrors.aliyun.com/ubuntu/ xenial-updates universe'
'deb-src https://mirrors.aliyun.com/ubuntu/ xenial multiverse'
'deb-src https://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse'
'deb-src https://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse'
'deb https://mirrors.aliyun.com/ubuntu/ xenial-security main restricted'
'deb https://mirrors.aliyun.com/ubuntu/ xenial-security universe'
'deb https://mirrors.aliyun.com/ubuntu/ xenial-security multiverse'
)

这里讲一下 > and >> 作用:

>  (覆盖写入)现有数据会被清空。文件指针在文件开头开始
>> (追加写入)文件中的现有数据会被保留。文件指针在文件结尾开始

首先先清空原有的内容,直接输出 echo 后的内容重定向到 $file 变量,覆盖写入

echo '#BY Nermif shell' > $file

For遍历数组内容循环写入

${#list[@]}获得数组长度

for ((i=o;i<${#list[@]};i++))
do
 echo ${list[$i]} >> $file
done

判断上一命令是否执行成功

if [ $? -eq 0 ];then
 echo 'rite OK'
else 
 echo 'rite NO'
fi

把代码拼起来
完整如下:

#!/bin/bash
file="/etc/apt/sources.list"
backfile="/etc/apt/sources.list.back"
if [[ ! -f "$backFile" ]]; then  
 cp $file $backfile
 echo 'backup file ok'
else  
 echo 'File existence'
fi
list=(
'deb https://mirrors.aliyun.com/ubuntu/ xenial main restricted'
'deb https://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted'
'deb-src https://mirrors.aliyun.com/ubuntu/ xenial universe'
'deb-src https://mirrors.aliyun.com/ubuntu/ xenial-updates universe'
'deb-src https://mirrors.aliyun.com/ubuntu/ xenial multiverse'
'deb-src https://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse'
'deb-src https://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse'
'deb https://mirrors.aliyun.com/ubuntu/ xenial-security main restricted'
'deb https://mirrors.aliyun.com/ubuntu/ xenial-security universe'
'deb https://mirrors.aliyun.com/ubuntu/ xenial-security multiverse'

)
echo '#BY Nermif' > $file
for ((i=o;i<${#list[*]};i++))
do
 echo ${list[$i]} >> $file
done
if [ $? -eq 0 ];then
 echo 'rite OK'
else 
 echo 'rite NO'
fi

写在后面的话

脚本还有很多的不足,比如shell环境如果不是bash 而是 sh 脚本会报一个dont't find file
错误,也就是找不到bash目录,从而脚本无法执行。
shell能做的事情还有很多,而我也只是个大家一个shell参考

完结撒花

标签: none

仅有一条评论

  1. 软件源更新的脚本!

添加新评论