Linux shell 程序设计5——shell中一些特殊符号的用法总结
1、{} 大括号:
eg: ls my_{finger,toe}s
这条命令相当于如下两个命令的组合:
ls my_fingers ; ls my_toes
eg: mkdir {userA,userB,userC}-{home,bin,data}
我们得到 userA-home, userA-bin, userA-data, userB-home, userB-bin, userB-data, userC-home, userC-bin, userC-data,这几个目录
大括号也可用于语句块的构造,命令之间可用回车隔开
2、[] 中括号:允许匹配方括号中任何一个单个字符
eg: ls /[eh][to][cm]*
相当于执行 ls /etc 和 ls /home。
常出现在流程控制中,其作用是括住判断式。注意:[、] 与表达式之间有空格。
eg:
if [ "$?" != 0 ]
then echo "Executes error"
fi
3、command 反引号:反引号中的 ...
Linux shell 程序设计4——shell变量
1、shell变量没有类型,所有变量都被当作字符串来处理。
2、shell变量的命名和c语言相同。
3、shell变量赋值和c语言略有不同,shell赋值要求等号的两边不能出现空格,而在linux C 中,一般为了增强代码的可读性,等号的两边都加一个空格。如果shell变量的赋值为字符串,而且字符串中含有空格,则必须给该字符串加单引号或双引号。
4、shell变量不同于c语言,无需定义可直接赋值使用。例如:
#!/bin/bash
#This is an example to show how to use variables
version="2.6.24"
name="linux-headers-2.6.24"
echo -e "name:$name\nversion:$version"
执行结果:
name:linux-headers-2.6.24
version:2.6.24
5、shell变量的作用范围是本shell环境。例如:
我们编写如下脚本:
#!/bin/bash
#script name: exam ...
Linux shell 程序设计3——命令行程序
1、date:显示、设置系统的日期和时间。
$date
2011年 01月 30日 星期日 14:43:35 CST
$date 012309232011
执行结果:设置主机的时间日期为:2011/01/23 09:23
$date +'%d %H %M'
以一定的格式显示时间或日期信息,常见有如下的格式:
%d :显示日
$date +'%d'
30
%D :显示日期
$date +'%D'
01/30/11
%e :不足二位数的部分不用0补而是用空格补
%m :显示月份
%Y :显示公元年
$date +'%Y'
2011
%m :显示月
%M :显示分钟
%S :显示秒
%s :显示自1970年1月1日 00:00:00开始到现在的秒数
$date +'%s'
1296371799
$date -R :产生与RFC-2822兼容的时间字符串
$date -R
Sun, 30 Jan 2011 15:20:17 +0800
2、cat:连接文件并显示
cat file1
显 ...
Linux shell 程序设计2——bash的内置命令
常用的内置命令忽略,来看看shell编程中其他一些重要的内置命令:
1、help:显示所有内置命令列表,或显示一个具体命令的用法。
-s: 表示列出命令的语法格式
例子:
help -s help help: help [-dms] [pattern …]
2、echo:用来显示一行文字。默认自动换行。
-n:取消自动换行。
-e:让字符串中的特殊字符起作用,即使字符串在单引号中。
例子: echo hello world 或 echo ‘hello world’ 或 echo “hello world” 输出结果为:hello world $echo -e “hello \n world” hello world $ echo -e ‘hello \n world’ hello world
3、printf:显示格式字符串,类似于c中的printf函数
格式:printf “格式字符串” 参数
-v :不显示到标准输出,而是赋值给-v选项后面的变量
例子:
str= "hello world"
printf "%s\n" "$st ...
Linux shell 程序设计1——安装及入门
1、什么是shell?
shell是linux内核的“壳”,是用户和内核的桥梁。它类似于windows下的命令提示符,将用户输入的命令解释给内核执行,并返回给用户结果。与windows命令提示符不同的是,shell还是一种脚本语言,可以按一定的流程将命令组合在一起使用,方便了用户。
2、shell的安装:
在ftp.gnu.org/gnu/bash可下载到bash的源码包:
bash-4.1.tar.gz
用 tar xzvf bash-4.1.tar.gz 解压,生成bash-4.1目录
使用cd 命令进入该目录,在该目录下执行./configure命令生成配置文件,再使用make命令编译,使用make install命令安装。
在/etc/shells文件中列出的shell才是合法的shell,所以要使用安装的shell必须把它加到该文件中。加入之后就可以通过chsh命令来切换shell。
3、shell中的特殊符号:
http://blogold.chinaunix.net/u2/75431/showart_1110962.html
4、shell的程序结构:
以#!开头,指名要 ...
Shell常用命令小结
1、ls:这是linux里最常用的命令,像数学里的1一样,简单但很重要。类似于dos里的dir命令,该命令的功能是列出目录下的文件或子目录。
-a:显示所有文件和目录,包括以.开头的隐藏文件
-l:以长格式的形式显示
例如:
kelvin@kelvin-laptop:~$ ls
examples.desktop 公共的 模板 视频 图片 文档 下载 音乐 桌面
kelvin@kelvin-laptop:~$ ls -a
. .gconfd .pulse-cookie
.. .gksu.lock .recently-used.xbel
.bash_history .gnash .sudo_as_admin_successful
.bash_logout .gnome2 .themes
.bashrc .gnome2_private .thumbnails
.bogofilter .gstr ...
插入法排序
何谓算法?算法就是计算机解决问题的方法和步骤。之所以强调计算机三个字,是因为计算机处理问题的方式和我们人类解决问题的方式有所不同。比如,在电视剧《宫》里看到一个智力题:把一头大象放进骄子里需要哪几个步骤?答案是:第一步,掀开轿帘;第二步,把大象放进去;第三步,放下轿帘。当然,可行性我们暂时不去考虑。然而,对于计算机来说,它没法去掀开轿帘,或者把大象放进轿子里。它只能通过计算机系统特有的指令去处理数据,以此来解决问题。
知道了什么是算法,那么如何去描述问题和算法呢?
以排序问题为例,描述一个问题可以用以下的方式:
输入:n个整数,存放于一个数组a之中。
输出:这n个数在数组a之中按从小到大的顺序存放。
给出了一个问题的输入和要求的输出,这个问题就确定了。描述一种算法,可以用伪代码或者是计算机语言。
对于排序问题,有多种算法。下面谈谈Insertion sort——插入法排序:
插入法排序的大概思想和摸扑克牌类似:当然,我们要求只有一个人摸牌,初始的数组就是放在桌上的一堆牌,而拿到手上的牌是排好序的。当我们摸起一张牌时,会按大小插入到已排好序的手牌之中。下面是基于linux系统,用C语言对 ...
Kobject浅析
面向对象的思想的确在应用软件的开发中颇具优势,它让一个个纯逻辑的函数和数据变成了一个个有生命的个体。鉴于性能的考虑,系统软件的实现(例如linux kernel)并没有采用面向对象的语言(如C++、Java)。但这丝毫没有影响到用小c找对象。
简单来说,一个对象包含数据以及对这些数据的操作。如果把银行比作一个对象的话,银行里的RMB就是数据、而银行的工作人员就相当于对象中方法(即操作数据的结构)。如果,我们想打劫银行的话,我们只需要拿着枪指着工作人员说,“亲,给我拿500万出来”。当然,如果你是一个比较牛逼的劫匪你可能要1000万,或者更多。这没有关系,因为无论你要多少钱,你都不必亲自动手去取,工作人员会帮你办好这一切。当你拎着一袋子钱溜走的时候,你可能会想说,“自从有了面向对象,腰不酸了、腿不疼了,打劫也更有效率了”。
这个例子只是想说明面向对象的一个显而易见的优点——给劫匪,哦不,给用户提供了可直接使用的接口。当然,面向对象的优点可不只这一点。
kobject是Linux设备驱动模型的核心部分,它的作用是简单点说就是嵌入到设备和驱动相关的结构体之中。既可以将这些设备和驱动组织成树形 ...
为虚拟机vCPU绑定物理CPU
为了提高缓存命中率,提高虚拟机性能,可以将vCPU绑定到指定的物理CPU去执行。具体设置步骤如下:
在宿主机操作系统启动时将用于虚拟机的CPU独立出来,使其上只运行vCPU线程,QEMU进程和少数的管理进程。设置方法即是在内核启动参数中加入: isolcpus=0,1 例如在grub.cfg下面的配置如下:
menuentry 'Fedora (3.13.6-200.fc20.x86_64) 20 (Heisenbug)' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.4-200.fc20.x86_64-advanced-5bcef32f-430b-4d74-beaa-4fcfccc438f9' {
......
linux /vmlinuz-3.13.6-200.fc20.x86_64 root=UUID=5bcef32f-430b-4d74-beaa-4fcfccc438f9 ...
bash配置文件的执行顺序
Linux用户在登陆系统之后会启动shell,并按照一定顺序读取shell的配置文件。以bash为例,配置文件的读取顺序如下:
/etc/profile
如果是图形界面登陆系统,读取~/.profile,bash配置完毕。
如果是命令行或者ssh登陆系统,读取~/.bash_profile,bash配置完毕。
如果是命令行或者ssh登陆系统,且/.bash_profile不存在,读取/.bash_login,bash配置完毕。
如果是命令行或者ssh登陆系统,且/.bash_profile,/.bash_login不存在,读取~/.profile,bash配置完毕。
图形界面启动后,用户可能会再启动一个shell,该shell的配置文件是~/.bashrc,用户自定义的配置一般会放到这里。