Linux python3安裝/shell腳本/if/循環/函數

python3安裝

安裝過程

安裝包: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編輯

步驟:小程序

  • 安裝python3的包 並解壓
  • 安裝依賴包
  • 檢測平臺 查看是否有問題 (echo $? 若是是0執行成功 非0執行失敗)
  • 編譯 查看是否可以編譯(echo $? 若是是0執行成功 非0執行失敗)
  • 最後安裝          (echo $? 若是是0執行成功 非0執行失敗)
  • 設置快捷鍵

pythonTab快捷鍵命令補全

 提升寫程序的效率,補全功能是必不可少的。對於python,介紹vim編輯下和python交互模式這兩種linux經常使用環境下的補全。vim

vim下的補全

  •     簡單python關鍵詞補全bash

  •     python 函數補全帶括號編輯器

  •     python 模塊補全

  •     python 模塊內函數,變量補全

安裝步驟:

  1. cd ~  

  2. wget https://github.com/rkulla/pydiction/archive/master.zip

  3. unzip master.zip

  4. mkdir -pv ~/.vim/tools/pydiction

  5. cp -r pydiction-master/after ~/.vim

  6. 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交互模式的自動補全

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腳本

什麼是shell?

shell是一個在操做系統之上的軟件,linux登陸後默認就進入這個軟件 shell是一個命令的解釋器,能解析用戶所輸入的命令 (ls cp rm pwd 等等) shell擁有本身內建的命令集

bash

bash(Bourne Again shell )是shell的擴展,而且徹底兼容shell(相似vim與vi的關係)

第一個shell腳本

  • 第一步:使用文本編輯器(vim)來建立文本文件(通常以.sh結尾)
    • 第一行必須包括shell聲明:#!
    • #!/bin/bash (告訴系統執行的時候要調用什麼解釋器)
    • #開頭的是shell的註釋
  • 第二步:輸入命令 echo 「hello world」
  • 第三步:給文件添加執行權限 chmod 755 hello.sh
  • 第四步 運行腳本
    • 第一種方式:指定腳本的絕對或相對路徑來運行 ./hello.sh
    • 第二種方式:直接運行解釋器,將腳本做爲參數運行 sh hello.sh
    • 常見問題 -bash: ./hello.sh: Permission denied 沒有賦予執行權限

shell變量/賦值

變量

變量以字母或者下劃線開頭,後面接任意長度的字母、數字和下劃線,如 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 $?

 

if語句控制

if 判斷

在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

if練習

判斷當前用戶是不是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語法

for arg in [list] do command… done list列表能夠是空格分割的字符串,也能夠是命令替換返回的結果 如 for v in /etc/sudoers /etc/resolv.conf do ls -l $v done

for循環練習

打印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循環

while基本語法

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
相關文章
相關標籤/搜索