Monthly Archives: 七月 2017

七月 31st, 2017

分享一个比较优秀的nginx日志分析软件。

 

首先安装,就不多说了,都一样:

apt-get install goaccess

其它系统参考此命令。然后,使用命令进行分析:

goaccess -f /home/wwwroot/img.qdm.log -c -a

第一步,选择日志格式,上下移动,空格勾选,回车确定,lnmp环境默认选择第3个。

然后,就会给出结果,t到顶端,b到卷末,q为退出,上下键滚动显示。

其它的若干使用方法:

goaccess -f access.log -a > report.html
#导出成html页面
sed -n ‘/05\/Dec\/2010/,$ p’ access.log | goaccess -s -b
#分析某一天的日志
sed -n ‘/5\/Nov\/2010/,/5\/Dec\/2010/ p’ access.log | goaccess -s -b
#分析某一天到某一天的日志
goaccess -e 123.123.123.123 -f access.log
#排除某个IP的记录
goaccess -a -f access.log
#显示User-Agents
grep ^123.123.123.123 access.log | goaccess
#只统计某个ip的记录
七月 31st, 2017

ptables是一个linux的基础组件,主要应用于防火墙应用,例如禁止某IP访问,或者禁止一些端口,提升网站的安全性。一般情况下,系统默认就会安装,如果没有安装,可自行安装。

yum install iptables #centos系统
apt-get install iptables #debian/ubuntu系统

一、先说一下几个常用命令:

service iptables -status #查看iptables是否运行
iptables -F #大写F,清空当前所有规则
iptables-save #注意s-之间无空格,保存当前规则
iptables -L -n #列表显示当前规则

二、常见封ip命令:

iptables -A INPUT -s 123.45.67.89 -j DROP #封掉单个IP地址
#屏蔽整个段(A类地址)即从192.0.0.1到192.255.255.254,则添加以下规则。
iptables -I INPUT -s 192.0.0.0/8 -j DROP
#封IP段(B类地址)即从192.168.0.1到192.168.255.254,则添加以下规则。
iptables -I INPUT -s 192.168.0.0/16 -j DROP
#封IP段(C类地址)即从192.168.200.1到192.168.200.254,则添加以下规则。
iptables -I INPUT -s 192.168.200.0/24 -j DROP

三、查看及删除命令:

iptables -L -n --line-numbers #按行列表显示当前规则
iptables -D INPUT 15 #删除第15条规则
七月 31st, 2017

变量是存储信息的容器:

实例

<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>

类似代数

x=5
y=6
z=x+y

在代数中我们使用字母(比如 x)来保存值(比如 5)。

从上面的表达式 z=x+y,我们能够计算出 z 的值是 11。

在 PHP 中,这三个字母被称为变量

注释:请把变量视为存储数据的容器。

PHP 变量

正如代数,PHP 变量可用于保存值(x=5)和表达式(z=x+y)。

变量的名称可以很短(比如 x 和 y),也可以取更具描述性的名称(比如 carname、total_volume)。

PHP 变量规则:

  • 变量以 $ 符号开头,其后是变量的名称
  • 变量名称必须以字母或下划线开头
  • 变量名称不能以数字开头
  • 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
  • 变量名称对大小写敏感($y 与 $Y 是两个不同的变量)

注释:PHP 变量名称对大小写敏感!

创建 PHP 变量

PHP 没有创建变量的命令。

变量会在首次为其赋值时被创建:

实例

<?php
$txt="Hello world!";
$x=5;
$y=10.5;
?>

以上语句执行后,变量 txt 会保存值 Hello world!,变量 x 会保存值 5,变量 y 会保存值 10.5。

注释:如果您为变量赋的值是文本,请用引号包围该值。

PHP 是一门类型松散的语言

在上面的例子中,请注意我们不必告知 PHP 变量的数据类型。

PHP 根据它的值,自动把变量转换为正确的数据类型。

在诸如 C 和 C++ 以及 Java 之类的语言中,程序员必须在使用变量之前声明它的名称和类型。

PHP 变量作用域

在 PHP 中,可以在脚本的任意位置对变量进行声明。

变量的作用域指的是变量能够被引用/使用的那部分脚本。

PHP 有三种不同的变量作用域:

  • local(局部)
  • global(全局)
  • static(静态)

Local 和 Global 作用域

函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。

函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。

下面的例子测试了带有局部和全局作用域的变量:

实例

<?php
$x=5; // 全局作用域

function myTest() {
  $y=10; // 局部作用域
  echo "<p>测试函数内部的变量:</p>";
  echo "变量 x 是:$x";
  echo "<br>";
  echo "变量 y 是:$y";
} 

myTest();

echo "<p>测试函数之外的变量:</p>";
echo "变量 x 是:$x";
echo "<br>";
echo "变量 y 是:$y";
?>

在上例中,有两个变量 $x 和 $y,以及一个函数 myTest()。$x 是全局变量,因为它是在函数之外声明的,而 $y 是局部变量,因为它是在函数内声明的。

如果我们在 myTest() 函数内部输出两个变量的值,$y 会输出在本地声明的值,但是无法 $x 的值,因为它在函数之外创建。

然后,如果在 myTest() 函数之外输出两个变量的值,那么会输出 $x 的值,但是不会输出 $y 的值,因为它是局部变量,并且在 myTest() 内部创建。

注释:您可以在不同的函数中创建名称相同的局部变量,因为局部变量只能被在其中创建它的函数识别。

PHP global 关键词

global 关键词用于访问函数内的全局变量。

要做到这一点,请在(函数内部)变量前面使用 global 关键词:

实例

<?php
$x=5;
$y=10;

function myTest() {
  global $x,$y;
  $y=$x+$y;
}

myTest();
echo $y; // 输出 15
?>

PHP 同时在名为 $GLOBALS[index] 的数组中存储了所有的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量。

上面的例子可以这样重写:

实例

<?php
$x=5;
$y=10;

function myTest() {
  $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} 

myTest();
echo $y; // 输出 15
?>

PHP static 关键词

通常,当函数完成/执行后,会删除所有变量。不过,有时我需要不删除某个局部变量。实现这一点需要更进一步的工作。

要完成这一点,请在您首次声明变量时使用 static 关键词:

实例

<?php

function myTest() {
  static $x=0;
  echo $x;
  $x++;
}

myTest();
myTest();
myTest();

?>

然后,每当函数被调用时,这个变量所存储的信息都是函数最后一次被调用时所包含的信息。

注释:该变量仍然是函数的局部变量。

七月 31st, 2017

PHP 脚本在服务器上执行,然后向浏览器发送回纯 HTML 结果。

基础 PHP 语法

PHP 脚本可放置于文档中的任何位置。

PHP 脚本以 <?php 开头,以 ?> 结尾:

<?php
// 此处是 PHP 代码
?>

PHP 文件的默认文件扩展名是 “.php”。

PHP 文件通常包含 HTML 标签以及一些 PHP 脚本代码。

下面的例子是一个简单的 PHP 文件,其中包含了使用内建 PHP 函数 “echo” 在网页上输出文本 “Hello World!” 的一段

PHP 脚本:

实例

<!DOCTYPE html>
<html>
<body>

<h1>我的第一张 PHP 页面</h1>

<?php
echo "Hello World!";
?>

</body>
</html>

注释:PHP 语句以分号结尾(;)。PHP 代码块的关闭标签也会自动表明分号(因此在 PHP 代码块的最后一行不必使用分号)。

PHP 中的注释

PHP 代码中的注释不会被作为程序来读取和执行。它唯一的作用是供代码编辑者阅读。

注释用于:

  • 使其他人理解您正在做的工作 – 注释可以让其他程序员了解您在每个步骤进行的工作(如果您供职于团队)
  • 提醒自己做过什么 – 大多数程序员都曾经历过一两年后对项目进行返工,然后不得不重新考虑他们做过的事情。注释可以记录您在写代码时的思路。

PHP 支持三种注释:

实例

<!DOCTYPE html>
<html>
<body>

<?php
// 这是单行注释

# 这也是单行注释

/*
这是多行注释块
它横跨了
多行
*/
?>

</body>
</html>

PHP 大小写敏感

在 PHP 中,所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感。

在下面的例子中,所有这三条 echo 语句都是合法的(等价):

实例

<!DOCTYPE html>
<html>
<body>

<?php
ECHO "Hello World!<br>";
echo "Hello World!<br>";
EcHo "Hello World!<br>";
?>

</body>
</html>

不过在 PHP 中,所有变量都对大小写敏感。

在下面的例子中,只有第一条语句会显示 $color 变量的值(这是因为 $color、$COLOR 以及 $coLOR 被视作三个不同的变量):

实例

<!DOCTYPE html>
<html>
<body>

<?php
$color="red";
echo "My car is " . $color . "<br>";
echo "My house is " . $COLOR . "<br>";
echo "My boat is " . $coLOR . "<br>";
?>

</body>
</html>

七月 31st, 2017

需要什么?

如需开始使用 PHP,您可以:

  • 使用支持 PHP 和 MySQL 的 web 主机
  • 在您的 PC 上安装 web 服务器,然后安装 PHP 和 MySQL。

使用支持 PHP 的 Web 主机

如果您的服务器支持 PHP,那么您无需做任何事情。

只要创建 .php 文件,然后上传到 web 目录中即可。服务器会自动对它们进行解析。

您无需编译或安装任何额外的工具。

因为 PHP 是免费的,大多数 web 主机都支持 PHP。

运行 PHP

不过如果您的服务器不支持 PHP,那么您必须:

  • 安装 web 服务器
  • 安装 PHP
  • 安装数据库,比如 MySQL

官方的 PHP 网站 (PHP.net) 提供了 PHP 的安装说明:http://php.net/manual/zh/install.php

注释

提示:如需在 Windows 平台设置并立即运行 PHP,您还可以:

下载 WebMatrix

七月 31st, 2017

 

您应当具备的基础知识

在继续学习之前,您需要对下面的知识有基本的了解:

  • HTML
  • CSS
  • JavaScript

什么是 PHP?

  • PHP 是 “PHP Hypertext Preprocessor” 的首字母缩略词
  • PHP 是一种被广泛使用的开源脚本语言
  • PHP 脚本在服务器上执行
  • PHP 没有成本,可供免费下载和使用

PHP 是一门令人惊叹的流行语言!

  • 它强大到足以成为在网络上最大的博客系统的核心(WordPress)!
  • 它深邃到足以运行最大的社交网络(facebook)!
  • 而它的易用程度足以成为初学者的首选服务器端语言!

什么是 PHP 文件?

  • PHP 文件能够包含文本、HTML、CSS 以及 PHP 代码
  • PHP 代码在服务器上执行,而结果以纯文本返回浏览器
  • PHP 文件的后缀是 “.php”

PHP 能够做什么?

  • PHP 能够生成动态页面内容
  • PHP 能够创建、打开、读取、写入、删除以及关闭服务器上的文件
  • PHP 能够接收表单数据
  • PHP 能够发送并取回 cookies
  • PHP 能够添加、删除、修改数据库中的数据
  • PHP 能够限制用户访问网站中的某些页面
  • PHP 能够对数据进行加密

通过 PHP,您可以不受限于只输出 HTML。您还能够输出图像、PDF 文件、甚至 Flash 影片。您也可以输出任何文本,比如 XHTML 和 XML。

为什么使用 PHP?

  • PHP 运行于各种平台(Windows, Linux, Unix, Mac OS X 等等)
  • PHP 兼容几乎所有服务器(Apache, IIS 等等)
  • PHP 支持多种数据库
  • PHP 是免费的。
  • PHP 易于学习,并可高效地运行在服务器端.
七月 30th, 2017

一、数据库的基本概念

数据库: 以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点、是与应用程序彼此独立的数据集合。

DBMS(DataBase Management System,数据库管理系统)和数据库。平时谈到“数据库”可能有两种含义:MSSQLServer、Oracle等某种DBMS;存放一堆数据表的一个分类( Catalog )。

常用的数据库 : MYSQL、MSSQLServer、DB2、Oracle、Access、Sybase 等。

目前所有的数据库,全是关系型数据库

关系型数据库通常包含下列组件:

–客户端应用程序(Client)

–数据库服务器(Server)

–数据库(Database)

— DBA 数据库管理员

— 主键(PrimaryKey)

主键就是数据行的唯一标识,不可以为空,不可以重复 (主键能不能为null)

— 表间关联、外键(ForeignKey)

表中的某一列,是另一个表中的主键,我们称之为外键,比如学生信息表中,有学校ID,而学校ID 又是学校表的主键

— 其他 : 数据冗余和数据完整性,实体完整性,引用完整性,域完整性和域约束,E/R图,范式

二、各种数据库的比较

— Access

是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。Microsoft Access数据库有一定的极限,如果数据达到100M左右,很容易造成服。务器iis假死,或者消耗掉服务器的内存导致服务器崩溃,表现为英文“Service Unavailable”。它的数据库文件,可以直接和项目一起迁移。

— MS SQL Server

是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比   Microsoft Access   要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL   语言,两者基本上都可以通用的。Microsoft SQL Server还有更多的扩展,可以用存储过程,数据库大小无极限限制。

— MySql

是个开源的数据库server,可运行在多种平台,如windows,unix/linux;他的体积很小是专为WEB 数据库设计的,特点是响应速度特别快,主要面向中小企业,对于海量数据库就显得力不从心了,它是真正的多用户多任务的数据库系统,他占用系统资源很少但功能很强大,可以作为大型数据库系统使用,最主要是其标准版是免费的。yahoo用的就是mysql;主要结合php语言开发。MySQL支持基本上是依靠网络和社区

— Oracle

各方面都比较成熟,但对硬件要求高,用于数据完整性、安全性要求较高的场合,能在所有主流平台上运行,完全支持所有的工业标准,采用完全开放策略。可以使客户选择最适合的解决方案,对开发商全力支持。平行服务器通过使一组结点共享同一簇中的工作来扩展服务器的能力,提供高可用性和高伸缩性的簇的解决方案,获得最高认证级别的iso标准认证,多层次网络计算,支持多种工业标准,可以用odbc,jdbc,oci等网络客户连接,较复杂,同时提供gui和命令行,在windows和unix下操作相同,如果windows不能满足需要,用户可以把数据库移到unix中。其操作和设置比较复杂,适用于有一定操作经验的用。

–IBM DB2

DB2主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于所有常见的服务器操作系统平台下。DB2提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力,具有与平台无关的基本功能和SQL命令。

三、MySQL的安装

1.找到安装包

 
2.双击安装

3.选择Custom(自定义)或者complete

4.安装(这里按照默认的执行即可)

5.安装路径的展示(点击Install)

6.等待

7.选中跳过,点击Next

8.点击Finish

9.Next

10.默认,点击Next

11.默认,Next(以后有需求只服务端时,这里要更改)

12.默认,点击Next

13.Next

14.Next

15.Next

16.这里要注意(默认时第一个,你要手动更改)

或者

17.Next

18.Password填写root即可。密码自己设置

19.Execute

20.等待

21.OK

22.出现了,可以双击打开

23.输入密码,回车

24.在任务管理器中,检查有木有真的启动

25.可以用DOS来开启和关闭mysql

三、MySQL数据库的维护

启动mysql  –>net start mysql(上图)

停止mysql  –> net stop mysql \(上图)

在命令行下直接进入mysql —> mysql -uroot -p

四、MySQL数据库密码的修改

1) 修改配置文件 my.ini ,在最后一行加入 skip-grant-tables

2) 重启服务  //net stop mysql ,然后net start mysql

3) 登录命令行  C:>mysql -uroot -p

4) 在mysql 命令行下,执行 use mysql;

5) 执行语句 update user set password=password(‘新密码’) where user =’root’  //这个user 是个系统表

6) 再把改过的配置文件还原回来

7) 再重启服务即可

五、MySQL数据库的删除

1) 卸载

2) 删除它的安装目录  //如果有必要,一定要备份数据库

3) 在注册表中把所有相关项删除

启动注册表 : 命令行下, 运行 regedit

七月 30th, 2017

ORA-39213: Metadata processing is not available 解决方案

向数据库导入数据:
[Oracle@localhost-a ~]$ impdp system/123456@prod DIRECTORY=dpdata1 DUMPFILE=test.dmp SCHEMAS=test

Import: Release 11.2.0.1.0 – Production on Wed Aug 31 17:40:07 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39006: internal error
ORA-39213: Metadata processing is not available

使用oerr命令查看错误信息:
[oracle@localhost-a ~]$ oerr ora 39213
39213, 00000, “Metadata processing is not available”
// *Cause:  The Data Pump could not use the Metadata API.  Typically,
//          this is caused by the XSL stylesheets not being set up properly.
// *Action: Connect AS SYSDBA and execute dbms_metadata_util.load_stylesheets
//          to reload the stylesheets.

按照提示进行操作,解决问题:
[oracle@localhost-a ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Aug 31 17:44:22 2016

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> execute dbms_metadata_util.load_stylesheets;

PL/SQL procedure successfully completed.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

重新执行导入操作:
[oracle@localhost-a ~]$ impdp system/123456@prod DIRECTORY=dpdata1 DUMPFILE=test.dmp SCHEMAS=test
Import: Release 11.2.0.1.0 – Production on Wed Aug 31 17:44:58 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table “SYSTEM”.”SYS_IMPORT_SCHEMA_01″ successfully loaded/unloaded
Starting “SYSTEM”.”SYS_IMPORT_SCHEMA_01″:  system/********@prod DIRECTORY=dpdata1 DUMPFILE=test.dmp SCHEMAS=test
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SYNONYM/SYNONYM
Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
…………
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

导入成功!!!

七月 30th, 2017

CentOS 6.7/Linux下设置IP地址

1:临时修改:

1.1:修改IP地址 # ifconfig eth0 192.168.2.104

1.2:修改网关地址 # route add default gw 192.168.2.1 dev eth0

1.3:修改DNS # echo “nameserver 192.168.2.1” >> /etc/resolv.conf         // 与主机的DNS服务器保持一致

这个时候就可以上网了,上网的IP地址为192.168.2.104,网关地址为192.168.2.1。但是这样的设置是临时性的,一旦重启网卡或者重启服务器,除了1.3的操作其他均会被还原,这样的方式只适合临时IP修改,想要永久性修改网卡配置文件,就需要修改相应的文件

2:永久性修改:

2.1:修改IP地址
修改/etc/sysconfig/network-scripts/ifcfg-eth0文件,如果有多张网卡,则修改相应的网卡
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0                             #网卡对应的设备别名
BOOTPROTO=static                    #网卡获得ip地址的方式(默认为dhcp,表示自动获取)
HWADDR=08:00:27:F9:5B:B9    #网卡MAC地址(物理地址)
IPADDR=192.168.2.104             #IP地址
NETMASK=255.255.255.0          #子网掩码
ONBOOT=yes                            #系统启动时是否激活此设备
2.2:修改网关地址
修改/etc/sysconfig/network文件
# vi /etc/sysconfig/network
NETWORKING=yes                #表示系统是否使用网络,no表示不能使用网络
HOSTNAME=doiido                #设置本机的主机名,要和/etc/hosts中设置的主机名相同
GATEWAY=192.168.100.1      #设置网关的IP地址
这个时候已经可以ping通IP地址,但是还无法ping通域名,因此需要修改DNS
2.3:修改DNS
修改/etc/resolv.conf文件
# vi /etc/resolv.conf
nameserver 192.168.2.1          #与主机DNS服务器保持一致
nameserver 114.144.114.114      #国内域名服务器
2.4:重启网卡
# service network restart
正在关闭接口 eth0: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0: [确定]
这个时候,系统就可以正常的上网了吗?按照正常情况是可以的,但是我在centos 6.7中这样尝试的时候,发现依然是只能ping通IP地址,不能访问域名。在网上查找了下

原来在Centos6.7下面直接修改/etc/resolv.conf不行。必须要在/etc /sysconfig/network-scripts/ifcfg-eth0里面最后加上dns的设置。要不然,重启后,肯定使用eth0设置中没有设 dns的相关信息,使/etc/resolv.conf恢复到原来的状态。

打开/etc/sysconfig/network-scripts/ifcfg-eth0,在里面加上DNS的配置
[root@localhost /]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=08:00:27:F9:5B:B9
TYPE=Ethernet
UUID=16b21d21-1ea0-4d4f-9d5d-4c164066cf15
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.2.104
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=192.168.2.1                #可选择与主机DNS保持一致,也可使用谷歌的8.8.8.8,根据实际情况切换
DNS2=114.144.114.114         #国内域名服务器
~
保存退出后,可以发现/etc/resolv.conf里面根本就不需要设置。service network restart 后,可以发现/etc/resolv.conf里面就有两个dns的解析ip了。配置好以后重启网络,cat /etc/resolv.conf,可以看到如下参数:
[root@localhost /]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.2.1
nameserver 114.144.114.114
DNS解析设置成功。 这个时候重新ping 域名地址,可以ping通
在此要强调一点的是,直接修改/etc/resolv.conf这个文件是没用的,网络服务重启以后会根据/etc/sysconfig /network-scripts/ifcfg-eth0来重载配置,如果ifcfg-eth0没有配置DNS,那么resolv.conf会被冲掉,重 新变成空值。
七月 30th, 2017

bc是Linux下的命令行式的计算器。 题目虽然叫任意进制,但是因为bc的限制,输入进制是2~16范围;输出进制是2~999范围。这与常见计算器的进制范围是一致的,比如windows计算器最高也只能处理16进制输入数据。

一、bc计算器的使用

  1. bc计算器默认输入、输出都为10进制。
    [root@CentOS6 ~]# bc                                  #打开bc计算器
    bc 1.06.95
    Copyright 2006 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'. 
    88*123                                                #计算 88*123
    10824                                                 #计算器输出结果
    #
    #
    123+65*2-100                                          #计算123+65*2-100
    153                                                   #计算器输出结果
  2. bc计算器进制转换
    [root@centos6 ~]# bc
    obase=16                                        #设置输出为16进制
    ibase=2                                         #设置输入为2进制
    1111111111111100011010                          #输入2进制数
    3FFF1A                                          #转换为16进制

二、通过管道运算与进制转换

  1. 这里使用的管道可以简单的理解为将echo "1+2"发送给 bc计算器
    [root@centos6 ~]# echo "1+1" | bc               #将1+1发送给bc计算器
    2
    [root@centos6 ~]#
    [root@centos6 ~]# echo "5*10-1" | bc            #将5*10-1发送给bc计算器
    49
  2. 双引号、单引号、反单引号的使用
    [root@centos6 ~]# echo "123+123" | bc
    246
    [root@centos6 ~]# echo '111+111'
    111+111
    [root@centos6 ~]# echo '111+111' | bc
    222
    [root@centos6 ~]# echo `111+111` | bc   
    -bash: 111+111: command not found
    [root@centos6 ~]# echo "`echo 123`+10" | bc
    133

三、使用中遇到的问题

  1. 先设置obase在设置ibase,计算器正常。
    [root@centos6 ~]# bc
    bc 1.06.95
    Copyright 2006 Free Software Foundation,
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'. 
    obase=16
    ibase=2
    1111111111111100011010
    3FFF1A
  2. 先设置ibase在设置obase,计算器输出不正常。
    [root@centos6 ~]# bc
    bc 1.06.95
    Copyright  2006 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'. 
    ibase=2
    obase=16
    1111111111111100011010
    21220002012002
  3. 先设置obase在设置ibase,计算输出正常
    修改obase后计算输出不正常

    [root@centos6 ~]# bc
    bc 1.06.95
    Copyright  2006 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'. 
    obase=16
    ibase=2
    1111111111111100011010
    3FFF1A
    obase=10
    1111111111111100011010
    1111111111111100011010
  4. 先设置obase在设置ibase正常,ibase与obase互换输出不正常。
    [root@centos6 ~]# bc
    bc 1.06.95
    Copyright  2006 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'. 
    obase=16
    ibase=2
    1111111111111100011010
    3FFF1A
    obase=2
    ibase=16
    3FFF1A
    1011010101
  5. 使用管道时同样只能先给obase赋值
    [root@centos6 ~]# echo "ibase=2;obase=16;11101" | bc
    1002
    [root@centos6 ~]# echo "obase=16;ibase=2;11101" | bc
    1D

结论?????

在bc计算器中,obase与ibase的赋值有先后顺序。
且在计算过程中ibase与obase只能赋值一次。