安裝包:node
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
tar -xvf Python-3.7.0.tgz #解壓
基礎包python
1、基礎yum包 yum install gcc yum install zlib yum install zlib-devel yum install libffi-devel -y yum install openssl openssl-devel -y
檢測平臺:linux
./configure --prefix=/usr/local/python3/
編譯:git
make
安裝:github
make install
設置快捷鍵:shell
ln -s /usr/local/python3/bin/python3 /bin/python3 #設置後能夠用python3進入python編輯
步驟:小程序
提升寫程序的效率,補全功能是必不可少的。對於python,介紹vim編輯下和python交互模式這兩種linux經常使用環境下的補全。vim
簡單python關鍵詞補全bash
python 函數補全帶括號編輯器
python 模塊補全
python 模塊內函數,變量補全
安裝步驟:
cd ~
unzip master.zip
mkdir -pv ~/.vim/tools/pydiction
cp -r pydiction-master/after ~/.vim
cp pydiction-master/complete-dict ~/.vim/tools/pydiction
完成後確保有以下結構便可:
修改用戶vim配置文件:
[root@node1 ~]# vim ~/.vimrc filetype plugin on let g:pydiction_location='~/.vim/tools/pydiction/complete-dict'
測試補全功能:
vim進入新建test.py,導入sys模塊,按Tab鍵,可發現已經有補全功能了。
python交互模式的自動補全
編寫tab補全腳本:
[root@node1 ~]# cat ~/.pythonTab.py import readline, rlcompleter; readline.parse_and_bind("tab: complete") [root@node1 ~]#
修改系統環境變量
[root@node1 ~]# cat /etc/profile.d/tab.sh export PYTHONSTARTUP=~/.pythonTab.py [root@node1 ~]# [root@node1 ~]# . !$ . /etc/profile.d/tab.sh [root@node1 ~]#
PYTHONSTARTUP:重要的Python環境變量之一,包含了在每次啓動的解釋器時執行Python源代碼的初始化文件的路徑。這個文件一般命名爲.pythonrc.py。
!$:調用上一個命令的最後一個參數。
二、module not found error no module named '_ctypes' make *** error 1 yum install libffi-devel -y 3、編譯安裝python3,刪除鍵不能用 yum install readline-devel 從新編譯安裝就能夠了 四、pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. yum install openssl openssl-devel -y
shell是一個在操做系統之上的軟件,linux登陸後默認就進入這個軟件 shell是一個命令的解釋器,能解析用戶所輸入的命令 (ls cp rm pwd 等等) shell擁有本身內建的命令集
bash(Bourne Again shell )是shell的擴展,而且徹底兼容shell(相似vim與vi的關係)
變量以字母或者下劃線開頭,後面接任意長度的字母、數字和下劃線,如 var=linux 變量的引用須要在前面加$符號 ,
如echo 「$var」 若是變量的值中間有空格,須要用雙引號引發來,如var=「hello world」
單雙引號區別:
位置參數 $n ,n爲數字
$0爲命令自己
$1-$9是命令行第一道第9個參數
$* 表明全部參數
$# 表明參數的個數
$? 表明上一個命令的返回狀態
命令替換的格式: $(cmd) 或者 `cmd` # ``爲tab上的反引號
在執行命令的時候,會先將$(cmd) 或者 `cmd` 裏的命令先執行一遍,再將結果返回到原來的命令中
var=$(uname -a) echo $var
命令替換是將一個命令的輸出做爲另一個命令的參數,而管道是將命令的輸出做爲下一個命令的標準輸入
如 date +%Y|touch touch $(date +%Y)
首先,echo 1+2,沒有輸出3。由於shell須要特殊的格式來進行算數運算 方式一 ((i=$j+$k)) 方式二 let i=$j+$k
賦值 var=$(($i+$j)) echo $var
sh lufei.sh ni(位置參數) lufei.sh: #!/bin/bash echo $1 echo $(id) id的執行結果做爲echo的參數 echo `id` 反引號 跟上面同樣
分號(;)是shell的命令分隔符, 讓同一行的命令可以順序執行。如echo 1 ;echo 2
1、命令行輸入2個數字,寫個小程序,計算2個數字的和,並輸出結果 二、命令行輸入2個文件,寫個小程序,把這兩個文件都拷貝到以年月日命名的目錄下,並輸出每次拷貝的執行結果 date +%Y%m%d
1.
#!/bin/bash let sum=$1+$2 echo $sum 2. #!/bin/bash file1=$1 file2=$2 dir=`date +%Y%m%d` mkdir $dir cp $file1 $dir&&echo $? cp $file2 $dir&&echo $?
在shell中if條件判斷語句和咱們的C、python等語言不一樣,shell的if語句條件必須用[ ]括起來,另外[ ]裏外都須要用空格與周圍隔開(例如[ a == b ]),不然會報錯 if基本語法 if [ 表達式 ];then ;fi 或 if command;then ;fi 其中[ 表達式 ] 等同於test命令,man test
-eq 測試兩個整數是否相等 -ne 測試兩個整數是否不等 -gt 測試一個數是否大於另外一個數 -lt 測試一個數是否小於另外一個數 -ge 大於或等於 -le 小於或等於
== 等於 != 不等 > 大於 < 小於 -z string 測試指定字符是否爲空,空着真,非空爲假 -n string 測試指定字符串是否爲不空,空爲假 非空爲真
-e FILE 測試文件是否存在 -f file 測試文件是否爲普通文件 -d file 測試指定路徑是否爲目錄 -r file 測試文件對當前用戶是否可讀 -w file 測試文件對當前用戶是否可寫 -x file 測試文件對當前用戶是均可執行
-a: and -o: or !: 非
command1 && command2 &&左邊的命令(命令1)返回真(即返回0,成功被執行)後,&&右邊的命令(命令2)纔可以被執行;命令之間使用 && 鏈接,實現邏輯與的功能。 如test -f /var/log/messages && echo ok
command1 || command2 ||則與&&相反。若是||左邊的命令未執行成功,那麼||右邊的命令就會執行 如 test -f 123 || echo error
判斷當前用戶是不是root,不是的話退出,若是是的話顯示一下root的登陸shell
id=`id -u` if [ $id -eq 0 ] then grep "^root" /etc/passwd|cut -d: -f7 else exit fi
命令行輸入任意三個整數,判斷最大的數
MAX=$1 if [ $2 -ge $1 ]; then MAX=$2 fi if [ $3 -ge $MAX ]; then MAX=$3 fi echo "the max number is $MAX."
用Shell腳本,判斷/bin/nohup是否是可執行文件,若是是將其拷貝到/tmpdir目錄下,判斷若是/tmpdir目錄不存在,自動建立。
if [ -x /bin/nohup ] then if [ ! -d /tmpdir ] then mkdir /tmpdir fi cp /bin/nohup /tmpdir fi
for arg in [list] do command… done list列表能夠是空格分割的字符串,也能夠是命令替換返回的結果 如 for v in /etc/sudoers /etc/resolv.conf do ls -l $v done
打印1-10
[root@localhost /]# for i in `seq 10` > do > echo $i > done
for i in /etc/crontab /etc/inittab ; do cat $i ; done 循環打印文件
請用for建立100個文件,文件名爲ps1-ps100
#!/bin/bash for i in `seq 100` do touch pa$i done
請用for把ps1-ps100,分別建立100個tar包,命名爲ps1.tar-ps100.tar
#!/bin/bash for i in `ls pa*` do tar -cvf $i.tar $i done
while [condition] do command... done
#輸入名字 打印一個隨機數字 while read -p "please input a name" name; do echo $name; done
死循環
while :; do echo true ; done 一句while循環
函數通常定義在shell腳本中使用
function name () { } shell函數能夠帶function關鍵字,也能夠不帶 shell函數內能夠加return返回值,也能夠不帶,若是不帶就以最後一條命令運行結果,做爲返回值。
例如 demoFun(){ echo "這是個人第一個 shell 函數!" } echo "-----函數開始執行-----" demoFun echo "-----函數執行完畢-----"
判斷用戶若是不存在就建立用戶 ,若是存在就打印用戶id
1 #!/bin/bash 2 if [ $# -ne 1 ];then 3 echo "args errors,should hava one arg" 4 exit 1 5 fi 6 user=$1 7 if grep -q "^$user" /etc/passwd 8 then 9 echo "$user is alive,id is $(id -u $user)" 10 else 11 echo "$user is not alived,creating" 12 useradd $user 13 if [ $? -eq 0 ] 14 then 15 echo "create user success" 16 else 17 echo "create user failed" 18 fi 19 fi
寫一個腳本模擬Linux登陸
while read -p "localhost login: " user do if [[ $user == "" ]] then continue fi read -s -p "Password: " passwd if [ $user == "root" -a X$passwd == X"123456" ] then echo "" while read -p "[$user@myterminal ~]#" cmd do $cmd done else echo "Login incorrect" fi done
寫一個shell腳原本替換系統的rm命令,要求當刪除一個文件或者目錄時,都要作一個備份,而後再刪除。
1 #!/bin/bash 2 if [ $# -eq 0 ] 3 then 4 echo "must have a arg at least" 5 exit 1 6 fi 7 8 file=$1 9 dest=/tmp 10 if [ ! -f $file ] 11 then 12 echo "$file doesn't exist" 13 exit 1 14 else 15 cp $file $dest/ 16 if [ $? -eq 0 ] 17 then 18 echo "backup success,deleting..." 19 rm $file 20 else 21 echo "backup failed,do not rm $file"
編寫shell腳本,把/root/目錄下的全部目錄(只須要一級)拷貝到/tmp/目錄下
dir='/root' subdir=`ls /root` for i in $subdir do if [ -d $dir/$i ] then cp -r $dir/$i /tmp/ fi done
請用shell編寫一個等腰三角形,接收用戶輸入的數字
left=$(($1-1)) count=1 move=$left or i in `seq $1` do for j in `seq $move`;do echo -n " " done for k in `seq $count`;do echo -n "*" done for j in `seq $move`;do echo -n " " done echo count=$((count+2)) move=$((move-1)) done