改变软件源的脚本
Tofloor
poster avatar
electricface
deepin
2013-11-21 22:20
Author
第一部分  bin/change-apt-source
  1. #!/bin/bash
  2. . ~/shlib/shlib.
  3. shlib. deepin-mirror color
  4. APTSL=/etc/apt/sources.list
  5. print_help (){
  6.         cat <<==
  7. `basename $0`
  8. Keyword can contain '*' wildcard
  9. Options:
  10.   -l  Show all available deepin mirrors
  11.   -h  Help
  12.   -n Not change file $APTSL
  13. ==
  14.         exit
  15. }
  16. print_mirrors (){
  17.         local m=${MIRRORS[@]}
  18.         echo -e ${m// /\\n}
  19.         exit
  20. }
  21. parse_keyword (){
  22.         [ -z $kw ] && kw=$d1
  23.         kw=`sed 's/*/.*/g' <<<$kw`
  24.         for i in ${MIRRORS[@]} ;do
  25.                 if grep -q -- "$kw" <<<$i ;then
  26.                         new_url=$i
  27.                         break
  28.                 fi
  29.         done
  30.         [ -z "$new_url" ]  && {
  31.                 echo ERROR no match mirror
  32.                 exit       
  33.         }
  34.         if ! [[ "$new_url" =~ http://|ftp:// ]] ;then
  35.                 new_url=http://$new_url
  36.         fi
  37. }
  38. replace_sl (){
  39.         if [ "$no_change" = 1 ];then
  40.                 sed_head=sed
  41.         else
  42.                 sed_head='sudo sed -i'
  43.         fi
  44.         tset -f blue
  45.         $sed_head "s,$url,$new_url,g" $APTSL
  46.         tput sgr0
  47. }
  48. main (){
  49.         replace_sl
  50.         echo
  51.         [[ "$no_change" -eq 1 ]] && exit
  52.         read -p 'Need apt-get update (N/y)?' aptupdate
  53.         [ "$aptupdate" = y ] && sudo apt-get update
  54. }
  55. while getopts "hn:l" arg;do
  56.         case $arg in
  57.         h)print_help;;
  58.         l)print_mirrors;;
  59.         n)
  60.                 kw=$OPTARG
  61.                 no_change=1
  62.                 ;;
  63.         esac
  64. done
  65. d1=$1
  66. url=`grep '^deb\s\+http.\+/deepin.\+main' $APTSL -m1`
  67. url_a=($url)
  68. url=${url_a[1]}
  69. url=${url%/deepin}
  70. tset -f red -B
  71. echo Origin: $url
  72. parse_keyword
  73. echo Match: $new_url
  74. main
  75. tput sgr0
Copy the Code

第二部分  shlib/shlib.
  1. #!/bin/bash
  2. export IMPORT_LV=$SHLVL
  3. declare -A SHLIB_LIST
  4. shlib. (){
  5.         local shm=/run/shm/
  6.         if [  -d $shm ] ;then
  7.                 shm=/run/shm/shlib
  8.         else
  9.                 shm=/dev/shm/shlib
  10.         fi
  11.         [ -d $shm ] || mkdir $shm
  12.         local libf
  13.         for lib in $@ ;do
  14.                 libf="$HOME/shlib/$lib"
  15.                 if [ "$lib" = "shlib." ];then
  16.                         echo "can't import self,useing cmd '. $libf'"
  17.                         continue
  18.                 fi
  19.                 if [ -f "$libf" ] ;then
  20.                         cp -u "$libf" "$shm/$lib"
  21.                         SHLIB_LIST["$lib"]=1
  22.                         source "$shm/$lib"
  23.                 else
  24.                         echo "ERROR : shell lib '$libf' no exists" >&2
  25.                 fi
  26.         done
  27. }
  28. shlib_list (){
  29.         echo ${!SHLIB_LIST[@]}
  30. }
  31. test_func (){
  32.         shlib. dict utils
  33.         echo import dict utils
  34.         shlib_list
  35. }
  36. # . ~/shlib/test shlib.
Copy the Code


第三部分 shlib/deepin-mirror
  1. #!/bin/bash
  2. MIRRORS=(
  3. packages.linuxdeepin.com
  4. test.packages.linuxdeepin.com
  5. mirror.sohu.com
  6. mirror.lzu.edu.cn
  7. ftp://mirror.lzu.edu.cn
  8. free.nchc.org.tw
  9. ftp://free.nchc.org.tw
  10. mirrors.oss.org.cn
  11. mirrors.zju.edu.cn
  12. mirrors.tuna.tsinghua.edu.cn
  13. mirrors.hust.edu.cn
  14. mirror.bit.edu.cn
  15. mirrors.jstvu.edu.cn
  16. mirrors.ustc.edu.cn
  17. mirror.tju.edu.cn
  18. )
Copy the Code


第四部分  shlib/color
  1. #!/bin/bash
  2. tset(){
  3. declare -A COLORS=(
  4. [black]=0
  5. [blue]=4
  6. [green]=2
  7. [cyan]=6
  8. [red]=1
  9. [purple]=5
  10. [yellow]=3
  11. [white]=7
  12. )
  13.         OPTIND=1
  14.         local str=  cmd=
  15.         while getopts "c:b:f:B" arg ;do
  16.                 case $arg in
  17.                 b) str+="setab ${COLORS[$OPTARG]} \n"
  18.                         ;;
  19.                 f) str+="setaf ${COLORS[$OPTARG]} \n"
  20.                         ;;
  21.                 B) str+="bold \n";;
  22.                 c) cmd=$OPTARG ;;
  23.                 esac
  24.         done
  25.         echo -e "$str" |tput -S
  26.         [ -n "$cmd" ]  && {
  27.                 "$cmd"
  28.                 tput sgr0
  29.         }
  30. }
  31. test_func (){
  32.         tset -b green -f red -B
  33.         echo f is red b is green and bold font
  34.         tset -b black -f green -c 'date'
  35.         tput sgr0
  36. }
  37. . ~/shlib/test
Copy the Code

第五部分 shlib/test
  1. #!/bin/bash
  2. _test_func_org (){
  3.         if (( $SHLVL == $BASHRC_LV ));then
  4.                 [  "test" = "$1" ] && return
  5.                 echo -e "\n"'/ ̄ ̄'   $1
  6.                 test_func 2>&1 |sed "s/^/|    /g"
  7.                 echo -e '\____'   $1"\n"
  8.         fi
  9. }
  10. _test_func_org $@
  11. #Standard test_func ()
  12. #Usage: only use to test shlib
  13. #last line write ". ~/shlib/test libname"
Copy the Code
Reply Favorite View the author
All Replies

No replies yet