不就是抽个血吗,至于么-jQuery,Linux完结篇

时间:2021-05-26 19:14:07

  hi

趁着周一去抽血化验,真开心。。。下午报告才出来,不过早上来了就开始各种晕菜,叫错名字,说错话。。。。。至于么。。

还有在教研室的30天就可以肥家了,凯森凯森。今天不想干活(哪天想干过我就问问),学学jquery吧。

1、jQuery

十、UI型插件

10.1 拖曳插件——draggable

拖曳插件draggable的功能是拖动被绑定的元素,当这个jQuery UI插件与元素绑定后,可以通过调用draggable()方法,实现各种拖曳元素的效果,调用格式如下:

$(selector). draggable({options})

options参数为方法调用时的配置对象,根据该对象可以设置各种拖曳效果,如“containment”属性指定拖曳区域,“axis”属性设置拖曳时的坐标方向。

<body>
<div id="divtest">
<div id="x" class="drag">沿x轴拖拽</div>
<div id="y" class="drag">沿y轴拖拽</div>
</div>

<script type="text/javascript">
$(function () {
$("#x").draggable({axis:"x"});
$("#y").draggable({axis:"y"});
});
</script>
</body>

10.2 放置插件——droppable

除使用draggable插件拖曳任意元素外,还可以调用droppable UI插件将拖曳后的任意元素放置在指定区域中,类似购物车效果,调用格式如下:

$(selector).droppable({options})

selector参数为接收拖曳元素,options为方法的配置对象,在对象中,drop函数表示当被接收的拖曳元素完全进入接收元素的容器时,触发该函数的调用。

<body>
<div id="divtest">
<div class="box">
<div class="title">产品区</div>
<div class="drag"><div>苹果</div></div>
</div>
<div class="box">
<div class="title">回收站</div>
<div class="cart"><div id="tip">还没有产品</div></div>
</div>
</div>

<script type="text/javascript">
$(function () {
$(".drag").draggable();
$(".cart").droppable({
drop: function () {
sum--;
$(".cart").removeClass("focus");
$("#tip").html("还没有产品");
$(".title span").html(sum);
}
})
});
</script>
</body>

10.3 拖曳排序插件——sortable

拖曳排序插件的功能是将序列元素(例如<option>、<li>)按任意位置进行拖曳从而形成一个新的元素序列,实现拖曳排序的功能,它的调用格式为:

$(selector).sortable({options});

selector参数为进行拖曳排序的元素,options为调用方法时的配置对象

<body>
<div id="divtest">
<div class="title">
<span class="fl">我最喜欢的运动</span>
</div>
<div class="content">
<ul>
<li>1)足球</li>
<li>2)散步</li>
<li>3)篮球</li>
<li>4)乒乓球</li>
<li>5)骑自行车</li>
</ul>
</div>
</div>

<script type="text/javascript">
$(function () {
$("ul").sortable({
delay:2,
opacity:0.4
})
});
</script>
</body>

10.4 面板折叠插件——accordion

面板折叠插件可以实现页面中指定区域类似“手风琴”的折叠效果,即点击标题时展开内容,再点另一标题时,关闭已展开的内容,调用格式如下:

$(selector).accordion({options});

其中,参数selector为整个面板元素,options参数为方法对应的配置对象。

<body>
<div id="divtest">
<div id="accordion">
<h3>
<a href="#">白富美</a></h3>
<p>咱们结婚吧!</p>
<h3>
<a href="#">土豪族</a></h3>
<p>咱们交个朋友吧!</p>
</div>
</div>

<script type="text/javascript">
$(function () {
$("#accordion").accordion();
});
</script>
</body>

10.5 选项卡插件——tabs

使用选项卡插件可以将<ul>中的<li>选项定义为选项标题,在标题中,再使用<a>元素的“href”属性设置选项标题对应的内容,它的调用格式如下:

$(selector).tabs({options});

selector参数为选项卡整体外围元素,该元素包含选项卡标题与内容,options参数为tabs()方法的配置对象,通过该对象还能以ajax方式加载选项卡的内容。

<body>
<div id="divtest">
<div id="tabs">
<ul>
<li><a href="#tabs-1">最爱吃的水果</a></li>
<li><a href="#tabs-2">最喜欢的运动</a></li>
</ul>
<div id="tabs-1">
<p>橘子</p>
<p>香蕉</p>
<p>葡萄</p>
<p>苹果</p>
<p>西瓜</p>
</div>
<div id="tabs-2">
<p>足球</p>
<p>散步</p>
<p>篮球</p>
<p>乒乓球</p>
<p>骑自行车</p>
</div>
</div>
</div>

<script type="text/javascript">
$(function () {
$("#tabs").tabs ({
//设置各选项卡在切换时的动画效果
fx: { opacity: "toggle", height: "toggle" },
event: "mousemove" //通过移动鼠标事件切换选项卡
})
});
</script>
</body>

10.6 对话框插件——dialog

对话框插件可以用动画的效果弹出多种类型的对话框,实现JavaScript代码中alert()confirm()函数的功能,它的调用格式为:

$(selector).dialog({options});

selector参数为显示弹出对话框的元素,通常为<div>,options参数为方法的配置对象,在对象中可以设置对话框类型、“确定”、“取消”按钮执行的代码等。

<body>
<div id="divtest">
<div class="content">
<span id="spnName" class="fl">张三</span>
<input id="btnDelete" type="button" value="删除" class="fr"/>
</div>
<div id='dialog-modal'></div>
</div>

<script type="text/javascript">
$(function () {
$("#btnDelete").bind("click", function () { //询问按钮事件
if ($("#spnName").html() != null) { //如果对象不为空
sys_Confirm("您真的要删除该条记录吗?");
return false;
}
});
});
function sys_Confirm(content) { //弹出询问信息窗口
$("#btnDelete").dialog({
height: 140,
modal: true,
title: '系统提示',
hide: 'slide',
buttons: {
'确定': function () {
$("#spnName").remove();
$(this).dialog("close");
},
'取消': function () {
$(this).dialog("close");
}
},
open: function (event, ui) {
$(this).html("");
$(this).append("<p>" + content + "</p>");
}
});
}
</script>
</body>

10.7 菜单工具插件——menu

菜单工具插件可以通过<ul>创建多级内联或弹出式菜单,支持通过键盘方向键控制菜单滑动,允许为菜单的各个选项添加图标,调用格式如下:

$(selector).menu({options});

selector参数为菜单列表中最外层<ul>元素,options为menu()方法的配置对象。

<body>
<ul id="menu">
<li><a href="#">小明一中</a>
<ul>
<li><a href="#">高中部</a>
<ul>
<li><a href="#">高一(1)班</a></li>
<li><a href="#">高一(2)班</a></li>
<li><a href="#">高一(3)班</a>
<ul>
<li><a href="#">小胡</a></li>
<li><a href="#">小李</a></li>
<li><a href="#">小陈</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">初中部</a>
<ul>
<li><a href="#">初一(1)班</a></li>
<li><a href="#">初一(2)班</a></li>
<li><a href="#">初一(3)班</a></li>
</ul>
</li>
<li><a href="#">教研部</a></li>
</ul>
</li>
<li class="ui-state-disabled"><a href="#">大明二中</a></li>
</ul>

<script type="text/javascript">
$(function () {
$("#menu").menu();
});
</script>
</body>

10.8 微调按钮插件——spinner

微调按钮插件不仅能在文本框中直接输入数值,还可以通过点击输入框右侧的上下按钮修改输入框的值,还支持键盘的上下方向键改变输入值,调用格式如下:

$(selector).spinner({options});

selector参数为文本输入框元素,可选项options参数为spinner()方法的配置对象,在该对象中,可以设置输入的最大、最小值,获取改变值和设置对应事件。

<body>
<div id="divtest">
<div class="title">
选择颜色值</div>
<div class="content">
<span id="spnColor" class="input fl">
<input />
</span>
<span id="spnPrev" class="prev fr"></span>
</div>
</div>

<script type="text/javascript">
$(function () {
//定义变量
var intR = 0, intG = 0, intB = 0, strColor;
$("input").spinner({
//初始化插件
max: 10,
min: 0,
//设置微调按钮递增/递减事件
spin: function (event, ui) {
if (ui.value == 8)
spnPrev.style.backgroundColor = "red";
else
spnPrev.style.backgroundColor = "green";
},
//设置微调按钮值改变事件
change: function (event, ui) {
var intTmp = $(this).spinner("value");
if (intTmp < 0) $(this).spinner("value", 0);
if (intTmp > 10) $(this).spinner("value", 10);
if (intTmp == 8)
spnPrev.style.backgroundColor = "red";
else
spnPrev.style.backgroundColor = "green";
}
});
});
</script>
</body>

10.9 工具提示插件——tooltip

工具提示插件可以定制元素的提示外观,提示内容支持变量、Ajax远程获取,还可以自定义提示内容显示的位置,它的调用格式如下:

$(selector).tooltip({options});

其中selector为需要显示提示信息的元素,可选项参数options为tooltip()方法的配置对象,在该对象中,可以设置提示信息的弹出、隐藏时的效果和所在位置。

<body>
<div id="divtest">
<div class="title">
工具提示插件</div>
<div class="content">
<div>
<label for="name">
姓名</label>
<input id="name" name="name" title="我是土豪,欢迎与我做朋友" />
</div>
</div>
</div>

<script type="text/javascript">
$(function () {
$("#name").tooltip({
show: {
effect: "slideDown",
delay: 350
},
hide: {
effect: "explode",
delay: 350
},
position: {
my: "left top",
at: "left bottom"
}
});
});
</script>
</body>

十一、工具类函数

11.1 获取浏览器的名称与版本信息

在jQuery中,通过$.browser对象可以获取浏览器的名称和版本信息,如$.browser.chrome为true,表示当前为Chrome浏览器,$.browser.mozilla为true,表示当前为火狐浏览器,还可以通过$.browser.version方式获取浏览器版本信息。

<body>
<div id="divtest">
<div class="title">
<span class="fl">获取浏览器名称和版本号</span>
</div>
<div class="content"></div>
</div>

<script type="text/javascript">
$(function () {
var strTmp = "您的浏览器名称是:";
if ($.browser.chrome) { //谷歌浏览器
strTmp += "Chrome";
}
if ($.browser.mozilla) { //火狐相关浏览器
strTmp += "Mozilla FireFox";
}
strTmp += "<br /><br /> 版本号是:" //获取版本号
+$.browser.version;
$(".content").html(strTmp);
});
</script>
</body>

很简单的一点,但是,要注意,jQuery的方法,一般是$(),函数常常是$.(?)

11.2 检测浏览器是否属于W3C盒子模型

浏览器的盒子模型分为两类,一类为标准的w3c盒子模型,另一类为IE盒子模型,两者区别为在Width和Height这两个属性值中是否包含padding和border的值,w3c盒子模型不包含,IE盒子模型则包含,而在jQuery 中,可以通过$.support.boxModel对象返回的值,检测浏览器是否属于标准的w3c盒子模型。

<body>
<div id="divtest">
<div class="title">
<span class="fl">检测是否是盒子模型</span>
</div>
<div class="content"></div>
</div>

<script type="text/javascript">
$(function () {
var strTmp = "您打开的页面是:";
if ($.support.boxModel) { //是W3C盒子模型
strTmp += "W3C盒子模型";
}
else { //是IE盒子模型
strTmp += "IE盒子模型";
}
$(".content").html(strTmp);
});
</script>
</body>

11.3 检测对象是否为空

在jQuery中,可以调用名为$.isEmptyObject的工具函数,检测一个对象的内容是否为空,如果为空,则该函数返回true,否则,返回false值,调用格式如下:

$.isEmptyObject(obj);

其中,参数obj表示需要检测的对象名称。

<body>
<div id="divtest">
<div class="title">
<span class="fl">检测对象是否为空</span>
</div>
<div class="content"></div>
</div>

<script type="text/javascript">
$(function () {
var obj = { "姓名": "土豪一族" };
var strTmp = "您定义了一个:";
if ($.isEmptyObject(obj)) { //检测是否为空
strTmp += "空对象";
}
else {
strTmp += "非空对象";
}
$(".content").html(strTmp);
});
</script>
</body>

11.4 检测对象是否为原始对象

调用名为$.isPlainObject的工具函数,能检测对象是否为通过{}new Object()关键字创建的原始对象,如果是,返回true,否则,返回false值,调用格式为:

$.isPlainObject (obj);

其中,参数obj表示需要检测的对象名称。

<body>
<div id="divtest">
<div class="title">
<span class="fl">检测对象是否为原始对象</span>
</div>
<div class="content"></div>
</div>

<script type="text/javascript">
$(function () {
var obj = "null";
var strTmp = "您定义了一个:";
if ($.isPlainObject(obj)) { //检测是否为原始对象
strTmp += "原始对象";
}
else {
strTmp += "非原始对象";
}
$(".content").html(strTmp);
});
</script>
</body>

11.5 检测两个节点的包含关系

调用名为$.contains的工具函数,能检测在一个DOM节点中是否包含另外一个DOM节点,如果包含,返回true,否则,返回false值,调用格式为:

$.contains (container, contained);

参数container表示一个DOM对象节点元素,用于包含其他节点的容器,contained是另一个DOM对象节点元素,用于被其他容器所包含。

<body>
<div id="divtest">
<div class="title">
<span class="fl">检测两个节点的包含关系</span>
</div>
<div class="content"></div>
</div>

<script type="text/javascript">
$(function () {
var node_a = document.body.firstChild;
var node_b = document.body;
var strTmp = "对象node_a";
if ($.contains(node_a,node_b)) { //检测是否包含节点
strTmp += " 包含 ";
}
else {
strTmp += " 不包含 ";
}
strTmp += "对象node_b";
$(".content").html(strTmp);
});
</script>
</body>

11.6 字符串操作函数

调用名为$.trim的工具函数,能删除字符串中左右两边的空格符,但该函数不能删除字符串中间的空格,调用格式为:

$.trim (str);

参数str表示需要删除左右两边空格符的字符串。

<body>
<div id="divtest">
<div class="title">
<span class="fl">字符串操作函数</span>
<span class="fr">
<input id="btnShow" name="btnShow" type="button" value="计算" />
</span>
</div>
<div class="content">
<input id="txtName" name="txtName" type="text" />
<div class="tip"></div>
</div>
</div>

<script type="text/javascript">
$(function () {
$("#btnShow").bind("click", function () {
$(".tip").html("");
var strTmp = "内容:";
var strOld = $("#txtName").val();
var strNew =$.trim(strOld);
strTmp += strOld;
strTmp += "<br/><br>除掉空格符前的长度:"
strTmp += strOld.length;
strTmp += "<br/><br>除掉空格符后的长度:"
strTmp += strNew.length;
$(".tip").show().append(strTmp);
});
});
</script>
</body>

11.7 URL操作函数

调用名为$. param的工具函数,能使对象或数组按照key/value格式进行序列化编码,该编码后的值常用于向服务端发送URL请求,调用格式为:

$. param (obj);

参数obj表示需要进行序列化的对象,该对象也可以是一个数组,整个函数返回一个经过序列化编码后的字符串。

<body>
<div id="divtest">
<div class="title">
<span class="fl">URL操作函数</span>
</div>
<div class="content">
<div class="tip"></div>
</div>
</div>

<script type="text/javascript">
$(function () {
//基本信息对象
var objInfo = new Object();
objInfo.name = "白富美";
objInfo.sex = 1;
//序列化对象
var objNewInfo =$.param(objInfo.name);
//显示序列化后的对象
var strTmp = "<b>对象 白富美 序列化后</b>:<br/><br/>";
strTmp += objNewInfo;
//显示在页面中
$(".tip").show().append(strTmp);
});
</script>
</body>

11.8 使用$.extend()扩展工具函数

调用名为$. extend的工具函数,可以对原有的工具函数进行扩展,自定义类级别的jQuery插件,调用格式为:

$. extend ({options});

参数options表示自定义插件的函数内容。

<body>
<div id="divtest">
<div class="title">
<span class="fl">自定义工具函数求两值中最小值</span>
<span class="fr">
<input id="btnShow" name="btnShow" type="button" value="计算" />
</span>
</div>
<div class="content">
<div class="tip"></div>
</div>
</div>

<script type="text/javascript">
/*------------------------------------------------------------/
功能:返回两个数中最小值
参数:数字p1,p2
返回:最小值的一个数
示例:$.MinNum(1,2);
/------------------------------------------------------------*/
(function ($) {
$.extend({
"MinNum": function (p1, p2) {
return (p1 > p2) ? p2 : p1;
}
});
})(jQuery);
$(function () {
$("#btnShow").bind("click", function () {
$(".tip").html("");
var strTmp = "17与18中最小的数是:";
strTmp +=$.MinNum(17, 18);
//显示在页面中
$(".tip").show().append(strTmp);
});
});
</script>
</body>

11.9 使用$.extend()扩展Object对象

除使用$.extend扩展工具函数外,还可以扩展原有的Object对象,在扩展对象时,两个对象将进行合并,当存在相同属性名时,后者将覆盖前者,调用格式为:

$. extend (obj1,obj2,…objN);

参数obj1至objN表示需要合并的各个原有对象。

<body>
<div id="divtest">
<div class="title">
<span class="fl">合并原有对象</span>
</div>
<div class="content">
<div class="tip"></div>
</div>
</div>

<script type="text/javascript">
$(function () {
var objInfo = { name: "" };
var objMess = { name: "白富美,", title: "欢迎与我联系!" };
var objNewInfo =$.extend(objInfo,objMess);
var strTmp = "<b>对象 白富美 合并后</b>:<br/><br/>";
strTmp += objNewInfo.name + objInfo.title;
//显示在页面中
$(".tip").show().append(strTmp);
});
</script>
</body>

 十二、在线聊天室实践

12.1 基本功能介绍

登陆后才能进入(基本信息的显示);

动态显示交流后的内容;

文字和表情的沟通实现(表情也是字符代号编码)

技术重点:ajax的无刷新技术展示数据

12.2 实现效果

利用jq中的ajax函数实现登陆,登陆时,显示登陆中,正确或失败,有相应的动作;

聊天室就是聊天内容区域,输入区域,人员显示区域

---------------------------------------------------

2、Linux完结篇

九、shell基础

9.1shell概述

--含义

就是其英文单词的意思——壳

是一个命令行解释器!——翻译依赖的是ASCII码,依赖它把命令翻译为二进制的,让内核能够解析命令。

也就是:用户写命令《--》shell解释翻译《--》内核

换言之,就是我们操作的界面。

但是,在linux特殊的在于,shell还是一个功能强大的编程语言,易编写,易调试,灵活性较强。

是解释执行的脚本语言,在shell中可以直接调用linux命令。

--分类

当前一般两类:Bourne shell(linux用的就是其下的Bash)和C shell(Unix中的,与c语言相似)

绝大多数的命令是通用的(包括linux和unix),根本原因在于都用shell,版本有差别而已。

[root@andy ~]# echo $SHELL
/bin/bash

这个命令可以看到当前的shell

--linux支持的

vi /etc/shells

打开一个文件

/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

这些都支持

9.2 脚本执行方式

--echo命令

就是打印嘛。

但和php中不太一样的是,要输出换行的\n时候需要这样

[root@andy ~]# echo -e "aldkjf\nadsf"
aldkjf
adsf

需要加选项-e。

linux本机中是无法支持中文字符,远程工具是可以的

[root@andy ~]# echo -e "\e[1;31m嫁人就要嫁凤姐\e[0m"
嫁人就要嫁凤姐

上个例子:\e[1;31m是开启颜色显示,\e[0m结束

31是红色,一直到40好像是,自己试试吧

--脚本

vi hello.sh

#!/bin/bash
#The first program

echo -e "\e[1;34m 天下掉下个林妹妹 \e[0m"

要先写入bash的那句话,尽量避免报错。

然后#后面的一般都是注释

shell的好处就是可以直接输出

但,暂时还不能运行——

--执行

赋予权限,直接运行——chmod 755 hello.sh, ./hello.sh

或者,bash命令,bash hello.sh

应该说,最好还是用赋予权限然后(绝对路径)运行

9.3bash的基本功能

9.3.1 命令别名与快捷键

--

命令别名==人的小名/外号

[root@andy ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

alias命令,可以查看别名。所以,我们设定别名也是上面的格式:alias cp='cp -i'

alias 别名=‘原命令’

重启的话会失效,要想一直有效,要写入对应的环境变量配置文件

vi ~/.bashrc

[root@andy ~]# vi /root/.bashrc

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
~

写入alias vi='vim'即可

unalias 别名,就是删除别名。同样,命令行的是临时删除

另外,命令的执行顺序,别名是优先级别第二高的

路径+命令》别名》bash命令》目录中查到的第一条命令

即,别名比原名级别高,或者,避免重叠/重复,除非你的目的就是这个

--快捷键

ctrl+c 强制终止

     +l 清屏

+a 移到命令行首(home)

+u 删除命令到行首

+e 跳到行尾(end)

+z 把命令放入后台(没有终止命令,少用)

+r 在历史命令中搜索

9.3.2 历史命令

上下箭头调用就好。

[root@andy ~]# history

该命令会显示所有你/当前用户输入过的所有历史命令。所有的历史命令是保存在.bash_history文件中的

history -c 清空历史命令。一般来说,最好不要清空历史命令——查错,以及防贼

history !n 重复执行第n条命令

history !! 重复执行上一条命令

history !字符串 调用最后一个以该字符串开头的命令(常用)

9.3.3 输出重定向

--标准输入输出

键盘——/dev/stdin 文件描述符为0

显示器——/dev/sdtout 文件描述符为1

显示器——/dev/sdterr 文件描述符为2,类型是标准错误输出

背就背文件描述符就好了

--输出重定向

就是把原本应该标准输出的方向重新定向到文件(拐个弯)。

用处就是自动的记录等,有实际的用处,也常用。

比如

[root@andy ~]# ifconfig > test.log
[root@andy ~]# cat test.log
eth0 Link encap:Ethernet HWaddr 00:0C:29:61:EB:6B
inet addr:192.168.23.50 Bcast:192.168.23.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe61:eb6b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11069 errors:0 dropped:0 overruns:0 frame:0
TX packets:3521 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:798686 (779.9 KiB) TX bytes:447837 (437.3 KiB)
Interrupt:19 Base address:0x2000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:20 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1532 (1.4 KiB) TX bytes:1532 (1.4 KiB)

命令的执行,可能会是定时用户来做的。

[root@andy ~]# ls > test.log
[root@andy ~]# cat test.log
anaconda-ks.cfg
cangls
hello.sh
install.log
install.log.syslog
japan
test.log

单个>,会覆盖结果;双>>是追加

[root@andy ~]# ifconfig >> test.log
[root@andy ~]# cat test.log
anaconda-ks.cfg
cangls
hello.sh
install.log
install.log.syslog
japan
test.log
eth0 Link encap:Ethernet HWaddr 00:0C:29:61:EB:6B
inet addr:192.168.23.50 Bcast:192.168.23.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe61:eb6b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11238 errors:0 dropped:0 overruns:0 frame:0
TX packets:3586 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:811445 (792.4 KiB) TX bytes:455539 (444.8 KiB)
Interrupt:19 Base address:0x2000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:20 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1532 (1.4 KiB) TX bytes:1532 (1.4 KiB)

如果希望同时保存报错信息(犯2信息)

dateads 2>>test.log

另外注意,追加是有空格,错误输出是没有空格的2>>test.log

但是,最有用的是正确和错误都要

命令 >> 文件 2>&1  

命令 &>> 文件  ——写到同一个文件

[root@andy ~]#
[root@andy ~]# ifconfig >> test2.log 2>&1
[root@andy ~]# cat test2.log
eth0 Link encap:Ethernet HWaddr 00:0C:29:61:EB:6B
inet addr:192.168.23.50 Bcast:192.168.23.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe61:eb6b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11444 errors:0 dropped:0 overruns:0 frame:0
TX packets:3638 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:825629 (806.2 KiB) TX bytes:461351 (450.5 KiB)
Interrupt:19 Base address:0x2000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:20 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1532 (1.4 KiB) TX bytes:1532 (1.4 KiB)

[root@andy ~]# ifconfig2 >> test2.log 2>&1
[root@andy ~]# cat test2.log
eth0 Link encap:Ethernet HWaddr 00:0C:29:61:EB:6B
inet addr:192.168.23.50 Bcast:192.168.23.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe61:eb6b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11444 errors:0 dropped:0 overruns:0 frame:0
TX packets:3638 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:825629 (806.2 KiB) TX bytes:461351 (450.5 KiB)
Interrupt:19 Base address:0x2000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:20 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1532 (1.4 KiB) TX bytes:1532 (1.4 KiB)

-bash: ifconfig2: command not found

 命令>>文件1 2>>文件2  ——分开保存

这三个操作是这一块需要记下来的!

--输入重定向

wc命令

[root@andy ~]# wc
sadklfjkla
asdlkfjl
asdf^[[3~asdlfj
asdf
4 4 40

统计了你输入的字符长度。

很少用,大概了解下

命令<文件

命令<<文件

9.3.4 管道符

 --多命令顺序执行

; 命令1;命令2 多个命令无逻辑关系按顺序执行

&& 逻辑与,其他一样——1成功,2才执行

||   或——1或2只执行一个

[root@andy ~]# ls ; ifconfig
anaconda-ks.cfg cangls hello.sh install.log install.log.syslog japan test2.log test3.log test.log
eth0 Link encap:Ethernet HWaddr 00:0C:29:61:EB:6B
inet addr:192.168.23.50 Bcast:192.168.23.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe61:eb6b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12241 errors:0 dropped:0 overruns:0 frame:0
TX packets:3901 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:884175 (863.4 KiB) TX bytes:489889 (478.4 KiB)
Interrupt:19 Base address:0x2000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:20 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1532 (1.4 KiB) TX bytes:1532 (1.4 KiB)

[root@andy ~]# ls && ifconfig
anaconda-ks.cfg cangls hello.sh install.log install.log.syslog japan test2.log test3.log test.log
eth0 Link encap:Ethernet HWaddr 00:0C:29:61:EB:6B
inet addr:192.168.23.50 Bcast:192.168.23.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe61:eb6b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12289 errors:0 dropped:0 overruns:0 frame:0
TX packets:3926 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:887929 (867.1 KiB) TX bytes:493627 (482.0 KiB)
Interrupt:19 Base address:0x2000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:20 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1532 (1.4 KiB) TX bytes:1532 (1.4 KiB)

[root@andy ~]# ls || config
anaconda-ks.cfg cangls hello.sh install.log install.log.syslog japan test2.log test3.log test.log

当然,;可以顺序执行很多命令

[root@andy ~]# ls ; ifconfig ; cd ;history

再看第二个

[root@andy ~]# ls && echo "yes"
anaconda-ks.cfg cangls hello.sh install.log install.log.syslog japan test2.log test3.log test.log
yes

适用于具有(简单)逻辑关系的情况,比如LAMP安装

简单的实现判断命令是否正确

[root@andy ~]# ls && echo yes || echo no
anaconda-ks.cfg cangls hello.sh install.log install.log.syslog japan test2.log test3.log test.log
yes

--管道符

|

也是多命令顺序执行。区别在于,命令一的正确输出作为命令2的操作对象

[root@andy ~]# ls -l /etc | more

所以,相应来说,管道符的命令要更加严格一点

[root@andy ~]# netstat -an | grep ESTABLISHED | wc -l
1

这个是以后常用的服务器的命令

9.3.5 通配符

--

可以匹配其他字符的符号

? * [] [a-z] [^0-9]

真的就类似正则表达式中的东西。

用法

[root@andy ~]# ls ja*
anaconda-ks.cfg cangls juls
[root@andy ~]# ls japan
anaconda-ks.cfg cangls juls

主要用来匹配文件名或者目录的东西;要匹配文件中的内容,就真的用正则表达式了

--特殊

$变量,取变量的值

‘’ 单引号中所有的特殊符号($`反引号)都没有意义;“”,特殊字符中的\ ` $有含义

$(),用来引用系统命令,和反引号一样,但推荐使用这个

[root@andy ~]# aa=$(ls)
[root@andy ~]# $aa
-bash: anaconda-ks.cfg: command not found
[root@andy ~]# echo $aa
anaconda-ks.cfg cangls hello.sh install.log install.log.syslog japan test2.log test3.log test.log
[root@andy ~]# echo '$aa'
$aa
[root@andy ~]# echo "$aa"
anaconda-ks.cfg
cangls
hello.sh
install.log
install.log.syslog
japan
test2.log
test3.log
test.log