找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
感激所有對伊莉作出奉獻的人發表文章前請先閱讀相關版規認識好友、聊天,分享生活趣事
航海王新竹mg 無碼中字惡靈古堡三國志
waifu acjuq 935air supp七澤美亞retrievi完蛋

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁]精靈幻想記 第二

[繁]妻子變成小學生。

[繁]最狂輔助職業【話

[繁]平凡職業造就世界

[繁]七龍珠大魔05-

[繁]莫名成為邪龍的五
WINDOWS 分享區LinuxWINDOWS討論MAC OS X
查看: 18031|回復: 25
打印上一主題下一主題

[原創]Shell script 教學[複製鏈接]

Rank: 2Rank: 2

帖子
915
積分
698 點
潛水值
18604 米
跳轉到指定樓層
樓主
發表於 2013-4-25 03:25 PM|只看該作者|正序瀏覽
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。
本帖最後由 l12436 於 2013-5-3 09:37 AM 編輯

小弟來發一下shell script的教學,基本上就是linux指令的整合。
由於小弟的shell script都是要寫的時候才會想到要寫甚麼,我會慢慢發佈一些教學。
#!/bin/bash
list=$(ls -b | grep 'tar\.gz')
for file in $list
do
     echo $file
done

這個是小弟常用的程式碼片段,他可以搜尋我們需要的檔案。後面的grep是過濾結果,這次我們要尋找的檔案室tar.gz,也就是使用tar zcvf指令壓縮的檔案。類似的片段可以達到一次重複命名多個檔案。
...
瀏覽完整內容,請先 註冊登入會員
分享分享0收藏收藏2支持支持2
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

Rank: 2Rank: 2

帖子
915
積分
698 點
潛水值
18604 米
26
發表於 2018-12-13 12:02 PM|只看該作者
Script 分享,利用kde的kdialog顯示選項,並且根據選擇的選項執行wine
  1. #!/bin/bash

  2. function SelectCon() {
  3.         list=$(docker ps --format "table {{.Names}}" | tail -n+2)
  4.         local args
  5.         for i in $list
  6.         do
  7.                 args+=" $i $i 0"
  8.         done
  9.         name=$(kdialog --radiolist SelectContainer $args)
  10.         if [ "$name" == "" ]; then
  11.                 return
  12.         fi
  13.         export DOCKERNAME=$name
  14. }

  15. function WINEENV() {
  16. #         if [ -e "/swap/.gamewine" ]; then
  17. #                 local defaultdir="/swap/.gamewine"
  18. #         elif [ -d "/swap/.wine" ]; then
  19. #                 local defaultdir="/swap/.wine"
  20. #         elif [ -d "$HOME/.wine" ]; then
  21. #                 local defaultdir="$HOME/.wine"
  22. #         fi
  23.         for i in $(ls -d /swap/wine/*)
  24.         do
  25.                 args+=" $i ${i##*/} 0"
  26.         done
  27.         result=$(kdialog --radiolist WineEnv $args)
  28. #         result=$(kdialog $args --getexistingdirectory $defaultdir )
  29.         if [ "$?" -eq 0 ]; then
  30.                 export WINEPREFIX="$result"
  31.         else
  32.                 exit
  33.         fi
  34. }

  35. function SelectProgram() {
  36.         list=$(cat /home/otakux/Shell/Launcher/wineprog.conf)
  37.         for file in $list
  38.         do
  39.                 arglist+=" $file $file"
  40.         done
  41.         program=$(kdialog $args --menu "Select Program" $arglist)
  42.        
  43.         if [ "$?" -ne 0 ]; then
  44.                 exit
  45.         fi
  46. }

  47. function parseArgs() {
  48.         pargs=""
  49. #         skip first which always program path
  50.         shift
  51.         while true
  52.         do
  53.                 case $1 in
  54.                         esync)
  55.                                 result+="esync "
  56.                                 WINEESYNC=1
  57.                                 ;;
  58.                         dmime)
  59.                                 result+="DMIME "
  60.                                 ;;
  61.                         desktop)
  62.                                 result+="Desktop "
  63.                                 ;;
  64.                         staging)
  65.                                 result+="CSMT "
  66.                                 ;;
  67.                         docker)
  68.                                 if [ "$NODOCKER" != "1" ]; then
  69.                                         result+="DOCKER "
  70.                                 fi
  71.                                 ;;
  72.                         selectenv*)
  73.                                 if [ "$NODOCKER" != "1" -a -z "${1#*=}" ]; then
  74.                                         result+="SelectEnv "
  75.                                 else
  76.                                         WINEPREFIX=${1#*=}
  77.                                 fi
  78.                                 ;;
  79.                         lang=*)
  80.                                 case ${1##*=} in
  81.                                         jp|JP)
  82.                                                 language="ja_JP.UTF-8"
  83.                                                 ;;
  84.                                         cn|CN)
  85.                                                 language="zh_CN.UTF-8"
  86.                                                 ;;
  87.                                 esac
  88.                                 ;;
  89.                         glsl-disable)
  90.                                 winetricks glsl=disabled
  91.                                 ;;
  92.                         -h|--help)
  93.                                 cat << EOF
  94. ${0##*/} [desktop|staging|glsl-disable|docker|selectenv[=<path>]|lang=<jp|cn>|dmime]
  95.         docker,selectenv
  96.                 only for host.
  97. EOF
  98.                                 exit 0
  99.                                 ;;
  100.                         DOCKER)
  101.                                 ;;
  102.                         *)
  103.                                 pargs+=" \"$1\""
  104.                                 ;;
  105.                 esac
  106.                 shift
  107.                 [ -z "$1" ] && break
  108.         done
  109. }

  110. function checkArgs() {
  111.         string="$1"
  112.         shift
  113.         echo "$*" | grep "$string"
  114. }

  115. if [ -f "$HOME/shm/.debug" ]; then
  116.         exec >~/shm/debug-wine 2>&1
  117. fi

  118. WINEESYNC=0
  119. WITHDESKTOP=0
  120. DEROX=0
  121. DOCKER=0
  122. NODOCKER=${NODOCKER:-0}
  123. args=""

  124. parseArgs "$@"

  125. if [ "$NODOCKER" != "1" -a -z "$result" ]; then
  126.         option='
  127.         Desktop                "With Desktop"                off
  128.         '
  129.         [ "$NODOCKER" -eq 0 ] &&\
  130.                 option+='
  131.                 DOCKER                "Run in Docker"                off
  132.                 SelectEnv        "Select Wine Prefix"        off
  133.                 SelectCon        "Select Container"                off
  134.                 '
  135.         option+='
  136.         CSMT                "Using Wine Staging"        off
  137.         esync                "Using Esync"                        off
  138.         DMIME                "Fix Micwave error"                off
  139.         '
  140.         [ "$NODOCKER" -eq 0 ] &&\
  141.                 option+='
  142.                 DeRoX                "Load in DeRoX"                off
  143.                 SelectProg        "Select Program"        off
  144.                 '
  145.         option+='
  146.         zh_CN.utf8         "LANG=CN"        off
  147.         ja_JP.utf8         "LANG=JP"        off
  148.         '
  149.         result=$(eval "kdialog $args --separate-output --checklist ExtendedWineStarter \
  150.         "$option""
  151.         )

  152.         if [ "$?" -ne 0 ]; then
  153.                 exit
  154.         fi
  155. fi

  156. for str in $result
  157. do
  158.         case $str in
  159.                 esync)
  160.                         WINEESYNC=1
  161.                         [ -z "$(checkArgs "$str" "$*")" ] && dockerargs+=" $str"
  162.                         ;;
  163.                 DMIME)
  164.                         export WINEDLLOVERRIDES="dmime=n,b"
  165.                         [ -z "$(checkArgs "dmime" "$*")" ] && dockerargs+=" dmime"
  166.                         ;;
  167.                 Desktop)
  168.                         WITHDESKTOP=1
  169.                         [ -z "$(checkArgs "desktop" "$*")" ] && dockerargs+=" desktop"
  170.                         ;;
  171.                 DeRoX)
  172.                         DEROX=1
  173.                         ;;
  174.                 CSMT)
  175.                         source $HOME/Shell/bin/wineenv /opt/wine-staging
  176.                         [ -z "$(checkArgs "staging" "$*")" ] && dockerargs+=" staging"
  177.                         ;;
  178.                 DOCKER)
  179.                         if [ "$NODOCKER" != "1" ]; then
  180.                                 DOCKER=1
  181.                         else
  182.                                 true
  183.                         fi
  184.                         ;;
  185.                 SelectCon)
  186.                         DOCKER=1
  187.                         SelectCon
  188.                         if [ -z "$DOCKERNAME" ]; then
  189.                                 exit
  190.                         fi
  191.                         ;;
  192.                 SelectEnv)
  193.                         WINEENV
  194.                         ;;
  195.                 SelectProg)
  196.                         SelectProgram
  197.                         ;;
  198.                 *utf8)
  199.                         language="$str"
  200.                         ;;
  201.         esac
  202. done

  203. if [ "$DOCKER" -eq 1 ]; then
  204.         export WINEPREFIX
  205.         $HOME/Shell/Launcher/docker-wine "$@" $dockerargs
  206.         exit
  207. fi

  208. if [ ! -z "$language" ]; then
  209.         export LANG="$language" LC_ALL="$language"
  210. fi
  211. if [ -z "$program" ]; then
  212.         program="$1"
  213.         shift
  214.         dir="${program%/*}"
  215.         pwd
  216.         programname="${program##*/}"
  217.         if [ "$dir" != "$program" ]; then
  218.                 cd "$dir"
  219.         fi
  220. fi
  221. if [ "$WITHDESKTOP" -eq 1 ];then
  222.         DESKTOP="explorer /desktop=$(echo "$programname" | sed -r '1,$s/.exe$//g;1,$s/\ //g;1,$s/\\.//g'),$(xdpyinfo  | sed -n 's/^ *dimensions: *\([0-9]\+x[0-9]\+\).*/\1/gp')"
  223. fi
  224. test "$DEROX" -eq 1 && DESKTOP="/home/otakux/Software/OllyDBG/odbg2/DeRoX.exe"

  225. if [ "$#" -lt 1 ]; then
  226.         pargs="$@"
  227. fi

  228. wine $DESKTOP "./$programname" $pargs
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。

使用道具檢舉

Rank: 2Rank: 2

帖子
915
積分
698 點
潛水值
18604 米
25
發表於 2018-12-13 12:00 PM|只看該作者
本帖最後由 l12436 於 2018-12-13 12:03 PM 編輯

Script分享
最近開始使用docker,為了在docker上面使用GUI,做了一個script專門為了執行docker,還帶一些彈性的function讓我可以額外再其他地方擴充。
  1. #!/bin/bash

  2. if [ -f "$HOME/shm/.debug" ]; then
  3.         exec >~/shm/debug-docker-utils 2>&1
  4. fi

  5. help() {
  6.         echo "$0 <start|stop|run|clean|do-init|update <container>>"
  7. }

  8. function image-opt() {
  9.         case $image in
  10.                 wine|wine:*)
  11.                         if [ -z "$(echo "$image" | grep 'creepy')" ]; then
  12.                                 args+="
  13.                                 -v /data:/data
  14.                                 -v /swap:/swap
  15.                                 -v /movie:/movie
  16.                                 -v /download:/download
  17.                                 -v $HOME/winedlls:$HOME/winedlls
  18.                                 -v $HOME/Software/Documents:$HOME/Software/Documents
  19.                                 $(mountHomeDir)
  20.                                 "
  21.                         else
  22.                                 args+="
  23.                                 -v $HOME/文宣:$HOME/文宣:ro
  24.                                 -v /data:/data:ro
  25.                                 -v /swap:/swap:ro
  26.                                 -v /movie:/movie:ro
  27.                                 -v /download:/download:ro
  28.                                 -v /data/game/creepypasta:/data/game/creepypasta:rw
  29.                                 -v /data/game/IndieGame:/data/game/IndieGame:rw
  30.                                 "
  31.                                 workdir=/data/game/creepypasta
  32.                                 XMODIFIERS=""
  33.                                 IME=""
  34.                         fi
  35.                         args+="
  36.                         -v $HOME/.local/share/wine-cache/etc:/etc
  37.                         -v $HOME/Shell/Launcher/WINE:/usr/local/bin/WINE
  38.                         -v $HOME/.config/Trolltech.conf:$HOME/.config/Trolltech.conf:ro
  39.                         -v $HOME/.config/gtk-3.0/:$HOME/.config/gtk-3.0:ro
  40.                         -v $HOME/.gtkrc-2.0:$HOME/.gtkrc-2.0:ro
  41.                         -v $HOME/.PlayOnLinux/wine:$HOME/.PlayOnLinux/wine/
  42.                         $(ConvPath \
  43.                                 $(ls -1 /usr/share/nvidia* -d 2>/dev/null)\
  44.                                 $(ls -1 \
  45.                                 /usr/lib/*nvidia*so* \
  46.                                 /usr/lib/x86_64-linux-gnu/*nvidia*so* \
  47.                                 /usr/lib/x86_64-linux-gnu/libcuda* \
  48.                                 /usr/lib/i386-linux-gnu/*nvidia*so* \
  49.                                 /usr/lib/i386-linux-gnu/libcuda* \
  50.                                 /etc/ld.so.conf.d/x86_64-linux-gnu*GL* \
  51.                                 /etc/ld.so.conf.d/i386-linux-gnu*GL* \
  52.                                 /usr/share/glvnd/egl_vendor.d/*nvidia*.json \
  53.                                 /usr/lib/x86_64-linux-gnu/xorg/nvidia_drv.so \
  54.                                 /usr/share/X11/xorg.conf.d/10-nvidia.conf\
  55.                                 /usr/lib/x86_64-linux-gnu/libXNVCtrl.so*\
  56.                                 /usr/lib/i386-linux-gnu/libXNVCtrl.so*\
  57.                                 /usr/lib/x86_64-linux-gnu/libnvcuvid.so*\
  58.                                 /usr/lib/i386-linux-gnu/libnvcuvid.so*\
  59.                                 /usr/lib/x86_64-linux-gnu/libnvoptix.so*\
  60.                                 /usr/lib/x86_64-linux-gnu/vdpau/libvdpau_nvidia.so*\
  61.                                 /usr/lib/i386-linux-gnu/vdpau/libvdpau_nvidia.so*\
  62.                                 /usr/lib/x86_64-linux-gnu/tls/libnvidia-tls.so*\
  63.                                 /usr/lib/x86_64-linux-gnu/xorg/libglxserver_nvidia.so*\
  64.                                 /usr/lib/i386-linux-gnu/tls/libnvidia-tls.so*\
  65.                                 2>/dev/null)\
  66.                         )
  67.                         $(ls -1 /usr/lib*/nvidia*/libGL.so 2>/dev/null | sed -rn 's/(.*)\/libGL.so/-v \1:\1:ro/gp')
  68.                         --privileged
  69.                         "
  70.                         if [ "$FASTWINE" == "1" ]; then
  71.                                 args+=" -v $HOME/.PlayOnLinux/wine/linux-amd64/2.6-staging:/opt/wine-staging"
  72.                         else
  73.                                 args+=" -v /opt/wine-staging:/opt/wine-staging"
  74.                         fi
  75.                         if [ "$GUI" != "1" ]; then
  76.                                 args+="$(getGuiArg)"
  77.                         fi
  78.                         Locale="zh_TW.UTF-8"
  79.                         ;;
  80.                 jenkins*)
  81.                         args+="
  82.                         -v /var/run/docker.sock:/var/run/docker.sock
  83.                         -v /movie/root/jenkins:/var/lib/jenkins
  84.                         -v /ssd/docker:/var/lib/docker
  85.                         --name=jenkins"
  86.                         [ -z "$(netstat -atn | egrep '8082 *:::')" ] && args+=" -p 8082:8080"
  87.                         ;;
  88.                 minecraft)
  89.                         args+="
  90.                         -v /movie/Eclipse/workspace-bukkit/bukkit:/movie/Eclipse/workspace-bukkit/bukkit:ro
  91.                         -v /swap/game/Linux:$HOME/game/server
  92.                         -e 'SHELL=/bin/bash'
  93.                         --name=server"
  94.                         workdir="$HOME/game/server"
  95.                         [ -z "$(ss -atn | egrep '25568 *:::')" ] && args+=" -p 25568:36679"
  96.                         if [ -z "$(ss -atn | egrep '255[5-8][0-9] *:::')" ]; then
  97.                                 args+="
  98.                                 -p 25558:25558
  99.                                 -p 25562-25566:25562-25566
  100.                                 -p 25666-25668:25666-25668
  101.                                 -p 25577:25577
  102.                                 "
  103.                         fi
  104.                         [ -z "$(ss -atn | egrep '12299 *:::')" ] && args+=" -p 12299:12299"
  105.                         ;;
  106.         esac
  107. }

  108. function run-parser() {
  109.         while [ ! -z "$1" ]
  110.         do
  111.                 case $1 in
  112.                         -nr)
  113.                                 defaultRemove=0
  114.                                 ;;
  115.                         -d)
  116.                                 interactive=0
  117.                                 daemon=1
  118.                                 args+=" -dt"
  119.                                 ;;
  120.                         -n)
  121.                                 interactive=0
  122.                                 ;;
  123.                         --wine-staging)
  124.                                 cmd="$HOME/Shell/bin/wine-source staging"
  125.                                 ;;
  126.                         --wine)
  127.                                 cmd=$HOME/Shell/bin/wine-source
  128.                                 ;;
  129.                         -g)
  130.                                 args+="$(getGuiArg)"
  131.                                 GUI=1
  132.                                 ;;
  133.                         -c)
  134.                                 shift
  135.                                 cmd="$1"
  136.                                 ;;
  137.                         -cn)
  138.                                 shift
  139.                                 container="$1"
  140.                                 ;;
  141.                         -u)
  142.                                 shift
  143.                                 user=$1
  144.                                 ;;
  145.                         --help)
  146.                                 echo "$0 run [--wine|--wine-staging|-r|-n|-nr|-d|-g|-c <cmd>|-u <user>|-cn <name>] <image> [args for docker]"
  147.                                 exit 0
  148.                                 ;;
  149.                         -v)
  150.                                 shift
  151.                                 args+=" -v \"${1// /\\ }\""
  152.                                 ;;
  153.                         *)
  154.                                 [ -z "$image" ] && image=$1 || args+=" $1"
  155.                                 ;;
  156.                 esac
  157.                 shift
  158.         done

  159.         if [ "$interactive" == "1" ]; then
  160.                 args+=" -i"
  161.                 if [ -t 1 ]; then
  162.                         args+=" -t"
  163.                 fi
  164.         fi
  165.         [ "$defaultRemove" == "1" ] && args+=" --rm"
  166.         if [ -z "$image" ]; then
  167.                 docker images && \
  168.                 read -p "image name > " image || exit
  169.         fi
  170.         container=${container:-$image}
  171.         args+="
  172.         -v $HOME/.gitconfig:$HOME/.gitconfig
  173.         "
  174. }

  175. function run() {
  176.         interactive=1
  177.         defaultRemove=1
  178.         daemon=0
  179.         user=otakux
  180.         workdir=~
  181.         run-parser "$@"

  182.         image-opt

  183.         if [ ! -z "$(type extra-config 2>/dev/null)" ]; then
  184.                 extra-config
  185.         fi

  186.         if [ "$daemon" == "1" -a "$cmd" != "/bin/bash --login" ]; then
  187.                 cmdbak="$cmd"
  188.                 cmd="/bin/bash --login"
  189.         fi
  190.         eval "/usr/bin/docker" run\
  191.         -u $user\
  192.         -v $shell:$HOME/Shell\
  193.         -v $sourcedir:$sourcedir\
  194.         -v $repo:$repo\
  195.         -v $ccache:$HOME/.ccache\
  196.         -v $shm:$shm\
  197.         -v $HOME/.config/user-dirs.dirs:$HOME/.config/user-dirs.dirs:ro\
  198.         -w $workdir\
  199.         -e LANGUAGE=$Locale\
  200.         -e LANG=$Locale\
  201.         -e LC_ALL=$Locale\
  202.         -e XMODIFIERS=$XMODIFIERS\
  203.         -e GTK_IM_MODULE=$IME\
  204.         -e QT4_IM_MODULE=$IME\
  205.         -e QT_IM_MODULE=$IME\
  206.         -e QT_QPA_PLATFORMTHEME=kde\
  207.         -e USER=$USER\
  208.         -e WINEDEBUG=-all\
  209.         -e DOCKER=1\
  210.         $args\
  211.         $image "$cmd"
  212.         if [ "$daemon" == "1" -a ! -z "$cmdbak" ]; then
  213.                 eval /usr/bin/docker exec -u $user $container "$cmdbak"
  214.         fi
  215. }

  216. clean() {
  217.         docker system prune
  218.         if [ "$?" == "0" ]; then
  219.                 return 0
  220.         fi
  221.         cleanList="dead"
  222.         while [ ! -z "$1" ]; do
  223.                 case $1 in
  224.                         -i)
  225.                                 interactive=y
  226.                                 ;;
  227.                         --no-created)
  228.                                 cleanList="${cleanList//created}"
  229.                                 ;;
  230.                         -h)
  231.                                 echo "$0 clean [-i|--no-created]"
  232.                                 exit
  233.                                 ;;
  234.                         *)
  235.                                 break
  236.                                 ;;
  237.                 esac
  238.                 shift
  239.         done
  240.         for status in $cleanList
  241.         do
  242.                 list=$(docker ps --filter status=$status --filter status=exited -aq)
  243.                 [ -z "$list" ] && {
  244.                         echo no $status container exists
  245.                         continue
  246.                 }
  247.                 echo ${status} list $(docker ps --filter status=$status --filter status=exited -aq)
  248.                 [ -z "$interactive" ] && ask=y || read -p "clean $status container ? > " ask
  249.                 [ ! -z "$ask" ] && docker ps --filter status=$status --filter status=exited -aq | xargs docker rm -v
  250.                 unset ask list
  251.         done
  252.         
  253.         [ -z "$interactive" ] && ask=y || read -p "remove untagged image ? > " ask
  254.         if [ ! -z "$ask" ]; then
  255.                 echo remove untagged image
  256.                 list=$(docker images --no-trunc | grep '<none>' | awk '{ print $3 }')
  257.                 [ ! -z "$list" ] && docker images --no-trunc | grep '<none>' | awk '{ print $3 }' | xargs -r docker rmi
  258.                 unset ask
  259.         fi
  260.         [ -z "$interactive" ] && ask=y || read -p "remove dangling volume ? > " ask
  261.         if [ ! -z "$ask" ]; then
  262.                 echo remove dangling volume
  263.                 list=$(docker volume ls -qf dangling=true)
  264.                 [ ! -z "$list" ] && docker volume rm $list
  265.                 unset ask
  266.         fi
  267. }

  268. function do-init() {
  269.         container=$1
  270.         if [ -z "$container" ]; then
  271.                 return 0
  272.         fi
  273.         docker exec -it $container apt update || return 0
  274.         docker exec -it $container apt install fonts-wqy-zenhei fonts-wqy-microhei xauth command-not-found iputils-ping lsof net-tools wget software-properties-common psmisc sudo vim curl bash-completion openssh-client rsync fakeroot git apt-transport-https openssh-server
  275.         docker exec -it $container adduser otakux
  276.         docker exec -it $container usermod -G 4,6,24,27,30,46 -a -p U6aMy0wojraho otakux
  277.         docker exec -it $container find /etc/apt/apt.conf.d/ -name '*docker*' -exec rm '{}' \;
  278.         docker exec -it $container sed -ri 's/PermitEmptyPasswords no/PermitEmptyPasswords yes/g'  /etc/ssh/sshd_config
  279. }

  280. function getGuiArg() {
  281.         local guiArgs tmpdisplay pulsenative pulsedir pidfile isPidExist
  282.         for file in $(ls -1 /tmp/pulse*/native 2>/dev/null) $XDG_RUNTIME_DIR/pulse/native /run/user/$(id -u)/pulse/native
  283.         do
  284.                 pidfile="${file%/*}/pid"
  285.                 if [ ! -f "$pidfile" ]; then
  286.                         continue
  287.                 fi
  288.                 pid=$(cat $pidfile)
  289.                 isPidExist=$(ps -p $pid | tail -n+2)
  290.                 if [ -e "$file" -a ! -z "$isPidExist" ]; then
  291.                         pulsenative=$file
  292.                         pulsedir=${file%/*}
  293.                         guiArgs+=" -v $pulsedir:$pulsedir"
  294.                         break
  295.                 fi
  296.         done
  297.         if [ ! -z "$(DISPLAY=":0" xrandr 2>/dev/null)" ]; then
  298.                 guiArgs+="
  299.                 -e DISPLAY=${DISPLAY:-:0}
  300.                 "
  301.         else
  302.                 guiArgs+="
  303.                 -e DISPLAY=${DISPLAY:-:1}
  304.                 -e WAYLAND_DISPLAY=${WAYLAND_DISPLAY:-wayland-0}
  305.                 "
  306.         fi
  307.         guiArgs+="
  308.         -v /tmp/.X11-unix:/tmp/.X11-unix:ro
  309.         -v /dev/dri:/dev/dri
  310.         --device=/dev/snd:/dev/snd
  311.         -e PULSE_SERVER=unix:$pulsenative
  312.         --group-add $(getent group audio | cut -d ':' -f3)
  313.         -v /dev/shm:/dev/shm
  314.         -v $HOME/.asoundrc:$HOME/.asoundrc
  315.         --device=/dev/nvidia0
  316.         --device=/dev/nvidiactl
  317.         --device=/dev/nvidia-modeset
  318.         --device=/dev/nvidia-uvm
  319.         --ipc=host
  320.         "

  321.         if [ -e "/dev/nvidia-uvm-tools" ]; then
  322.                 guiArgs+=" --device=/dev/nvidia-uvm-tools"
  323.         fi
  324.         echo "$guiArgs"
  325. }

  326. function mountHomeDir() {
  327.         local list="flash game image music Packfile Software Text winedlls"
  328.         local homeArgs
  329.         for dir in $list
  330.         do
  331.                 homeArgs+=" -v $HOME/$dir:$HOME/$dir"
  332.         done

  333.         echo "$homeArgs"
  334. }

  335. function ConvPath() {
  336.         local parg=

  337.         for path in $@
  338.         do
  339.                 if [ -e "$path" ]; then
  340.                         pargs+=" -v $path:$path:ro"
  341.                 fi
  342.         done
  343.         
  344.         echo "$pargs"
  345. }

  346. sourcedir="/swap/Programing/Source/"
  347. repo="/repo"
  348. ccache="/ssd/ccache"
  349. shell="$HOME/Shell"
  350. shm="$HOME/shm"
  351. cmd=${cmd:-"/bin/bash --login"}
  352. image=${image}
  353. Locale="C.UTF-8"
  354. IME="gcin"
  355. XMODIFIERS=${XMODIFIERS:-"@im=$IME"}

  356. while true
  357. do
  358.         case $1 in
  359.                 init)
  360.                         cat << EOF
  361. apt install command-not-found iputils-ping lsof net-tools wget software-properties-common psmisc sudo vim curl bash-completion openssh-client rsync fakeroot git apt-transport-https
  362. yum install lsof net-tools wget psmisc sudo vim curl bash-completion openssh rsync fakeroot git
  363. sed -r 's/^mirrorlist/#mirrorlist/g;s/^#baseurl/baseurl/g;s/mirror.centos.org\/centos\/\\\$releasever/vault.centos.org\/5.10/g'

  364. # need for X11 forwarding
  365. apt install fonts-wqy-zenhei fonts-wqy-microhei xauth fonts-arphic-ukai fonts-arphic-uming

  366. # wine hidden dependency
  367. apt install winbind libpng12
  368. EOF
  369.                         break
  370.                         ;;
  371.                 do-init)
  372.                         shift
  373.                         do-init "$1"
  374.                         break
  375.                         ;;
  376.                 update)
  377.                         shift
  378.                         cname=$1
  379.                         shift
  380.                         image=$1
  381.                         shift
  382.                         case $cname in
  383.                                 -h|--help)
  384.                                 cat << EOF
  385. ${0##*/} update <container hash> <image>
  386.         export container as image.
  387.         use for constant update build image
  388.         Goal is to keep image size small.
  389. EOF
  390.                                         exit 0
  391.                                         ;;
  392.                         esac
  393.                         if [ -z "$cname" -o -z "$image" ]; then
  394.                                 exit 1
  395.                         fi
  396.                         iname=${image//:/-}
  397.                         if [ ! -d "${BACKDIR:-/download/docker-backup}" ]; then
  398.                                 mkdir -p ${BACKDIR:-/download/docker-backup}
  399.                         fi
  400.                         cd ${BACKDIR:-/download/docker-backup} &&\
  401.                         echo "exporting $cname to $iname.tar" &&\
  402.                         docker export $cname > $iname.tar &&\
  403.                         echo "import $iname.tar as $image" &&\
  404.                         docker import $iname.tar $image &&\
  405.                         rm $iname.tar
  406.                         exit 0
  407.                         ;;
  408.                 run)
  409.                         shift
  410.                         run "$@"
  411.                         break
  412.                         ;;
  413.                 clean)
  414.                         clean
  415.                         break
  416.                         ;;
  417.                 exec)
  418.                         shift
  419.                         while true
  420.                         do
  421.                                 case $1 in
  422.                                         -c)
  423.                                                 shift
  424.                                                 cmd="$1"
  425.                                                 ;;
  426.                                         *)
  427.                                                 if [ -z "$image" ]; then
  428.                                                         image="$1"
  429.                                                 else
  430.                                                         args+=" $1"
  431.                                                 fi
  432.                                                 ;;
  433.                                 esac
  434.                                 shift
  435.                                 [ -z "$1" ] && break
  436.                         done
  437.                         /usr/bin/docker exec $args $image bash -c "$cmd"
  438.                         break
  439.                         ;;
  440.                 -j*|-n)
  441.                         ;;
  442.                 "")
  443.                         help
  444.                         break
  445.                         ;;
  446.                 *)
  447.                         /usr/bin/docker "$@"
  448.                         break
  449.                         ;;
  450.         esac
  451.         shift
  452.         [ -z "$1" ] && break
  453. done
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

Rank: 2Rank: 2

帖子
915
積分
698 點
潛水值
18604 米
24
發表於 2018-12-13 11:55 AM|只看該作者
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。
alleluia001 發表於 2014-7-3 08:28 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

shell script 很強大,最近但卻改用python來寫 XD

是看過滿多人這樣用的,我個人是除非用到python的函式庫,不然不太會用python取代shell script。
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

alleluia001 該用戶已被刪除
23
發表於 2014-7-3 08:28 AM|只看該作者
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php
shell script 很強大,最近但卻改用python來寫 XD




如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。

使用道具檢舉

Rank: 2Rank: 2

帖子
915
積分
698 點
潛水值
18604 米
22
發表於 2014-6-11 11:20 PM|只看該作者
本帖最後由 l12436 於 2014-6-11 11:21 PM 編輯

sum of subset bash版
  1. #!/bin/bash

  2. nums="2 10 13 17 22 42 14 3 15 10 25 65 67 100 67"
  3. # nums="2 10 13 17 22 42"
  4. ans=""
  5. weight=65
  6. # weight=52
  7. numlist=(${nums// / })
  8. length=${#numlist[@]}

  9. function test() {
  10.         if [ "$1" -gt 0 ]; then
  11.                 for i in $(seq $2 $(($length - 1))  )
  12.                 do
  13.                         tmp=${numlist[$i]}
  14.                         ans+="$tmp "
  15.                         test "$(( $1 - $tmp ))" "$(( $i + 1 ))"
  16.                         
  17.                         anslist=(${ans// / })
  18.                         anslength=${#anslist[@]}
  19.                         anstmp=$(( $anslength - 1 ))
  20.                         if [ "$anstmp" -ge 0  ]; then
  21.                                 removenum=${anslist[ $anstmp ]}
  22.                                 ans=${ans/%$removenum }
  23.                         fi
  24.                 done
  25.         elif [ "$1" -eq 0 ]; then
  26.                 echo $ans
  27.         fi
  28. }

  29. function removeGreater()  {
  30.         for i in $(seq 0 $(($length - 1))  )
  31.         do
  32.                 tmp=${numlist[$i]}
  33.                 if [ "$tmp" -gt "$1" ]; then
  34.                         if [ -z "$(echo $greater | grep $tmp)" ]; then
  35.                                 greater+="$tmp "
  36.                                 nums=${nums//$tmp/}
  37.                         fi
  38.                 fi
  39.         done
  40.         numlist=(${nums// / })
  41.         length=${#numlist[@]}
  42.         greater=${greater/%\ }
  43.         echo "${greater//\ /
  44. \n'}"
  45. }

  46. removeGreater $weight
  47. test $weight 0
複製代碼

...
瀏覽完整內容,請先 註冊登入會員
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

帖子
0
積分
0 點
潛水值
2870 米
21
發表於 2014-2-22 05:34 PM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
l12436 發表於 2013-12-2 12:29 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

基本上都是內建的說明和鳥哥的資訊,其他一些進階的資訊都是google來的。 ...

謝謝大大分享,鳥哥好像沒有交的很詳細 除了鳥哥以外你知道有其他地方有資料嗎???...我google的 都是零零星星的資料 有沒比較完整的...
瀏覽完整內容,請先 註冊登入會員

點評

l12436 基本上我的google只是為了搜尋進階的使用方法,其他的大部分鳥哥都有寫了  發表於 2014-2-24 04:51 PM
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。

使用道具檢舉

Rank: 1

帖子
607
積分
169 點
潛水值
447 米
20
發表於 2014-2-20 06:44 AM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
目前正在學習中
以前Windows用習慣了
現在學習用指令,真的要慢慢熟悉
大大實在太厲害了!
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com

使用道具檢舉

rtmju82 該用戶已被刪除
19
發表於 2013-12-15 10:41 AM|只看該作者
好強的功力
真的是蠻厲害的

非常感謝大大分享~
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php

使用道具檢舉

Rank: 2Rank: 2

帖子
915
積分
698 點
潛水值
18604 米
18
發表於 2013-12-2 12:29 PM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
loke0205 發表於 2013-11-30 01:32 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

挖 shell 耶 謝謝大大分享 我剛好想知道相關知識
順便問一下大大 你參考的書籍OR資料是? ...

基本上都是內建的說明和鳥哥的資訊,其他一些進階的資訊都是google來的。...
瀏覽完整內容,請先 註冊登入會員





使用道具檢舉

帖子
0
積分
0 點
潛水值
2870 米
17
發表於 2013-11-30 01:32 AM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
挖 shell 耶 謝謝大大分享 我剛好想知道相關知識
順便問一下大大 你參考的書籍OR資料是?

使用道具檢舉

Rank: 2Rank: 2

帖子
915
積分
698 點
潛水值
18604 米
16
發表於 2013-11-11 02:59 PM|只看該作者
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。
分享,之前寫的image下載。
因為是寫給自己用的,所以功能沒有很多。

下載: 訪客無法瀏覽下載點,請先 註冊登入會員

如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。

使用道具檢舉

Rank: 2Rank: 2

帖子
915
積分
698 點
潛水值
18604 米
15
發表於 2013-6-28 08:13 PM|只看該作者
erobyii 發表於 2013-6-28 10:24 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

教學03

1.有,把${argu// / }改成${arg// / },因為程式是手打的,沒有測試。
2.那個單純只是擷取所有的參數,可以使用for list in $@去讀取。
...
瀏覽完整內容,請先 註冊登入會員
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

erobyii 該用戶已被刪除
14
發表於 2013-6-28 10:24 AM|只看該作者
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。
本帖最後由 erobyii 於 2013-6-28 10:34 AM 編輯

教學03
  1. arg="$@"
  2. argu=(${argu// / })
  3. for (( i=0; i<${#argu[@]}; i=i+1 ))
  4. do
  5.   if [ -f "${argu[$i]}" ]; then
  6.     mv "${argu[$i]}" "${argu[$i]//tar.gz/tgz}"
  7.   fi
  8. done
複製代碼


程式碼要用code才行,像這樣。比較整齊。。。
===================================
研究一下教學03。。。

教學03

arg="$@"               
argu=(${argu// / })                                #1 把傳入的參數做成數組
for (( i=0; i<${#argu[@]}; i=i+1 ))        #2 for 中間的是 array 長度
do
  if [ -f "${argu[$i]}" ]; then                    #3 若有檔案存在,就mv xxx xxx.tgt
    mv "${argu[$i]}" "${argu[$i]//tar.gz/tgz}"
  fi
done


1.  argu=(${argu// / }) 是否有錯?

2. $@ 就是 positional parameter,會變成這種形式 $1 $2 $3

3. ${argu//xxx/yyy} 就是若 argu 有match xxx,便以yyy代之。//   就是 greedy match

4 ${#argu[@]}  就是數組長 ${#xxx},開頭有個#,都長度有關係。。

5 ${argu[$i]}  就是數組元素



P.S. 版主您好,我的密碼本不小心全刪了,不是多重分身,這樣可以嗎?



補充內容 (2013-6-28 10:38 AM):
linux 工具的學習也是好重要

補充內容 (2013-6-29 08:22 AM):
多謝大大...
瀏覽完整內容,請先 註冊登入會員
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。

使用道具檢舉

阿爾托利亞saber 該用戶已被刪除
13
發表於 2013-6-26 12:01 AM|只看該作者
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
證想學呢 謝謝大大分享啊




使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部