python3安装

安装过程

安装包:

wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
tar -xvf Python-3.7.0.tgz #解压

基础包

1、基础yum包
yum install gcc
yum install zlib
yum install zlib-devel
yum install libffi-devel -y
yum install openssl openssl-devel -y

检测平台:

./configure --prefix=/usr/local/python3/

编译:

make

安装:

make install

设置快捷键:

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下的补全

  • 简单python关键词补全

  • 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。

!$:调用上一个命令的最后一个参数。

常见问题

2、module not found error no module named '_ctypes' make *** error 1
yum install libffi-devel -y 3、编译安装python3,删除键不能用
yum install readline-devel
重新编译安装就可以了 4、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、命令行输入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"" ]
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

Linux python3安装/shell脚本/if/循环/函数的更多相关文章

  1. shell脚本之循环语句与函数

    shell脚本之循环语句与函数 echo的用法: echo -n #表示不换行输出 echo -e #输出转义字符,将转义后的内容输出到屏幕上 转义字符: \n :换行,被输出的字符从"\n ...

  2. 如何在java程序中调用linux命令或者shell脚本

    转自:http://blog.sina.com.cn/s/blog_6433391301019bpn.html 在java程序中如何调用linux的命令?如何调用shell脚本呢? 这里不得不提到ja ...

  3. Linux生产服务器Shell脚本分享

    Linux生产服务器Shell脚本分享 2012-6-6 86市场网 linux 作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来 ...

  4. linux一键安装vncserver脚本

    title: linux一键安装vncserver脚本 date: 2016-04-11 14:32:04 tags: --- linux多数情况下是作为服务器使用的,管理员一般也喜欢使用命令行来管理 ...

  5. Linux下添加shell脚本使得nginx日志每天定时切割压缩

    Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常 ...

  6. shell编程基础(四): shell脚本语法之函数及调试

    一.Shell脚本中的函数 和C语言类似,Shell中也有函数的概念,但是函数定义中没有返回值也没有参数列表.例如: #! /bin/sh fun(){ echo "Function fun ...

  7. linux下实现shell脚本自动连接mongodb数据库并创建索引

    在linux下创建shell脚本

  8. 2019.11.13课堂实验之用Linux下的shell脚本完成两文本交替输出

    有两个文本如下,实际中并不知道两文本各有多少行: 文本1.txt aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ccccccccccccccccccccccccccc ...

  9. Java执行cmd命令、bat脚本、linux命令,shell脚本等

    1.Windows下执行cmd命令 如复制 D:\tmp\my.txt 到D:\tmp\my_by_only_cmd.txt 现文件如图示: 执行代码: private static void run ...

随机推荐

  1. 用nw.js开发markdown编辑器-已完成功能介绍

    这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/10/29/hexomd-introduction   文章目录 1. 功能列表 ...

  2. Redis之Hash数据结构

    0.前言 redis是KV型的内存数据库, 数据库存储的核心就是Hash表, 我们执行select命令选择一个存储的db之后, 所有的操作都是以hash表为基础的, 下面会分析下redis的hash数 ...

  3. MVC的设计模式在JavaWeb中的实现

    JSP开发模式 jsp开发模式的发展 1.模式1:(适合小型项目的技术的开发)     a.第一版本号,纯jsp(封装数据.处理数据,显示数据)     b.第二版本号,Jsp+JavaBean.   ...

  4. jQuery读取json文件

    转 http://www.jb51.net/article/36678.htm 1.userInfo.html <!DOCTYPE html PUBLIC "-//W3C//DTD X ...

  5. leetcode_Power of Two_easy

    Given an integer, write a function to determine if it is a power of two. 题目意思:推断某个数是否是2的幂. 方法:直接进行bi ...

  6. C语言基础(14)-递归

    一. 递归的定义 函数可以调用自己,这就叫函数的递归. 先序递归和后序递归 #include <stdio.h> void test(int n); void test1(int n); ...

  7. grub的三种安装方式

    1.install命令 install: install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p ...

  8. PHP获取QQ群成员QQ号码

    .加入某个群 .进入群空间http://qun.qzone.qq.com/group#!/25998059/member 备注:25998059为群号码 .进入群成员列表 .使用浏览,在某个群成员头像 ...

  9. windows下使用python2.7.6 安装django

    1) 安装python2.7.6 2) 由于 python2.7.6 中没有安装setuptools,需要先从官网下载setuptools,下载zip包然后解压,运行 python setup.py ...

  10. CronTrigger中cron表达式使用

    1.定时任务,当执行是具体时间的时候,不会立即执行,而是到指定时间执行. 2.实现Job接口时候,类中要有无参的public构造方法. 3.表达式中共用七个字段,按顺序是秒.分.时.日.月.周.年,默 ...