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
相关文章
相关标签/搜索