ubuntu常用的命令

本文详细介绍了Ubuntu系统中的一些常用命令,包括xz压缩与解压、tar.xz文件的处理、vim编辑器的操作、grep与sed的使用,以及wget的下载技巧。内容涵盖了文件操作、文本处理和系统管理等多个方面,旨在帮助用户更高效地管理和操作Ubuntu系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/******************************************************************************************************

ubuntu 设置投影仪的命令

今天一朋友找我帮忙,说是要作linux下的多显示器输出,我们先是在xorg里面改了一阵,却效果欠佳,最后发现原来一个命令就可以搞定。

首先接上VGA,执行命令
$ xrandr --output VGA --auto
当前桌面会复制到VGA上面,此时执行xrandr会看到有了VGA-0

$ xrandr --output VGA-0 --auto
断开VGA-0

$xrandr ----output VGA-0 --auto --left-of LVDS
按照当前的配置扩展桌面,需要在/etc/x11/xorg.cong里面添加一段,把整个screen的大小变化一下,实际上你的外接VGA可能是更大的分辨率,这个也很简单,自己修改--auto就可以了

我的笔记本是ibm x31,物理性的断开外接的VGA以后可以看到断开的VGA和LVDS
$ xrandr
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 2048 x 768
VGA-0 disconnected (normal left inverted right x axis y axis)
LVDS connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768       60.0*+   60.0 
   800x600        60.3 
   640x480        59.9 

20100518
前几天用用到分屏显示,发现自己忘了怎么作,查到这里发现需要的还没有,补充一下
我现在的笔记本分辨率1366x768,外接一个1280x1024的显示器
1. vi /etc/X11/xorg.conf
    Section "Screen"
    ...
      SubSection "Display"
        Depth 24
        #添加下面这一行,1366+1280=2646,我是左右,所以纵向还是1024,如果要纵向也可以就768+1024替换原来的1024,不过这样视频缓存太浪费了
        Virtual 2646 1024
      EndSubSection
    EndSection

2.ctrl+alt+backspace,重启X

3.$ xrandr --output LCD --mode 1366x768
   $ xrandr --output CRT1 --auto --left-of LCD --mode 1024x768

参考:
http://www.thinkwiki.org/wiki/Xorg_RandR_1.2


******************************************************************************************************/


/**************************************************************************************************************

linux下批量替换文件内容

1、网络上现成的资料

  格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`

  linux sed 批量替换多个文件中的字符串

  sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`

  例如:替换/home下所有文件中的www.admin99.net为admin99.net

  sed -i "s/www.admin99.net/admin99.net/g" `grep www.admin99.net -rl /home`

  exp:sed -i "s/shabi/$/g" `grep shabi -rl ./`

2、自己额外附加

  2.1 将文件1.txt内的文字“garden”替换成“mirGarden”

  # sed -i "s/garden/mirGarden/g" 1.txt   //sed -i 很简单

  2.2 将当前目录下的所有文件内的“garden”替换成“mirGarden”

  ## sed -i "s/garden/mirGarden/g" `ls` //其实也就是ls出多个文件名而已

****************************************************************************************************************/

vim 批量缩进:

在命令模式下:使用 '<' 或 '>'

示例: # :2,10>     // 表示从第2行到第10行 向右缩进一个tab

命令:shift+3

作用:搜索功能 就是说   在vim里面,如果光标所在的词(word)是 perl的任何位置  然后我按shift+3  后  perl这个词变成了另外一种颜色,  以后的每个文件 也都这样 只要打出perl这个词 就会变色(或者叫 加亮)


vim 选中单词:

命令:vw

作用:你可能会使用命令vw,很不幸的是它会把下一个单词的首字母也选中。如果你足够细心的话,你会发现答案在之前的章节中讲过,命令是:viw。它的作用是选取一个单词(word),无论光标在这个单词的哪个位置都能选中整个单词


命令:find

作用:查找文件名

例子: find ./ -name "xxx"    // 在当前目录及其子目录下 查找文件名为xxx的路径


命令:grep

作用:查找凡是包含某个字符串的文件内容

例子:grep -r xxx ./           // 在当前目录及其子目录的情况下查找凡是包含xxx字符串的所有文件


% 跳转到相配对的括号
gD 跳转到局部变量的定义处
'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
mx 设置书签,x只能是a-z的26个字母
`x 跳转到书签处("`"是1左边的键)
> 增加缩进,"x>"表示增加以下x行的缩进
< 减少缩进,"x<"表示减少以下x行的缩进

{ 跳到上一段的开头
} 跳到下一段的的开头
( 移到这个句子的开头
) 移到下一个句子的开头

[[ 跳转至上一个函数(要求代码块中'{'必须单独占一行)
]] 跳转至下一个函数(要求代码块中'{'必须单独占一行)

C-] 跳转至函数或变量定义处
C-O 返回跳转前位置
C-T 同上
nC-T 返回跳转 n 次

0 数字0,跳转至行首
^ 跳转至行第一个非空字符
$ 跳转至行尾

"0x%08x"
其中,0x为普通字符,输出的时候会原样输出为0x。
%08x为整型以16进制方式输出的格式字符串,会把后续对应参数的整型数字,以16进制输出。08的含义为,输出的16进制值占8位,不足部分左侧补0。
于是,如果执行
printf("0x%08x", 0x1234);
会输出0x00001234。


/*********************************************************************************************************************/

fg、bg、jobs、&、ctrl + z都是跟系统任务有关:
Linux下有些程序运行会挂起或者耗用很长时间,这时我们就会想到把它放到后台去执行,其实就是bg、fg的事
bg(将作业放置于后台执行)(在前台执行时间过长,则可以按ctrl+z,暂停进程,用bg放其至后台)
bg 作业ID
fg(把作业放置前台执行)
jobs(查看后台作业)

假如正在运行/root/bin/scp.sh  需要运行很长时间,这时可以使用Ctrl+Z 来暂停一下它
[1]+ Stopped /root/bin/scp.sh
然后再用bg把它调到后台去
#bg 1
[1]+ /root/bin/scp.sh &

用 jobs 命令查看正在运行的任务:
#jobs
[1]+ Running /root/bin/scp.sh &

如果想把它调回到前台运行,可以用
#fg 1
/root/bin/scp.sh
这样,你在控制台上就只能等待这个任务完成了。
/*******************************************************************************************************************/

wget 命令
wget是一个从网络上自动下载文件的自由工具,支持通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理。
用法示例:
1、下载整个http或者ftp站点。
    wget http://place.your.url/here
    这个命令可以将http://place.your.url/here 首页下载下来。使用-x会强制建立服务器上一模一样的目录,如果使用-nd参数,那么服务器上下载的所有内容都会加到本地当前目录。

    wget -r http://place.your.url/here
    这个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址同样会被下载,因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!基于这个原因,这个参数不常用。可以用-l number参数来指定下载的层次。例如只下载两层,那么使用-l 2。

    要是您想制作镜像站点,那么可以使用-m参数,例如:wget -m http://place.your.url/here
    这时wget会自动判断合适的参数来制作镜像站点。此时,wget会登录到服务器上,读入robots.txt并按robots.txt的规定来执行。

    2、断点续传。
    当文件特别大或者网络特别慢的时候,往往一个文件还没有下载完,连接就已经被切断,此时就需要断点续传。wget的断点续传是自动的,只需要使用-c参数,例如:
    wget -c http://the.url.of/incomplete/file
    使用断点续传要求服务器支持断点续传。-t参数表示重试次数,例如需要重试100次,那么就写-t 100,如果设成-t 0,那么表示无穷次重试,直到连接成功。-T参数表示超时等待时间,例如-T 120,表示等待120秒连接不上就算超时。

    3、批量下载。
    如果有多个文件需要下载,那么可以生成一个文件,把每个文件的URL写一行,例如生成文件download.txt,然后用命令:wget -i download.txt
这样就会把download.txt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页)

    4、选择性的下载。
    可以指定让wget只下载一类文件,或者不下载什么文件。例如:
    wget -m --reject=gif http://target.web.site/subdirectory
    表示下载http://target.web.site/subdirectory,但是忽略gif文件。--accept=LIST 可以接受的文件类型,--reject=LIST拒绝接受的文件类型。


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

压缩,解压命令

.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————

xz压缩文件方法或命令

xz -z 要压缩的文件

如果要保留被压缩的文件加上参数 -k ,如果要设置压缩率加入参数 -0 到 -9调节压缩率。如果不设置,默认压缩等级是6.

xz解压文件方法或命令

xz -d 要解压的文件

同样使用 -k 参数来保留被解压缩的文件。

创建或解压tar.xz文件的方法

习惯了 tar czvf 或 tar xzvf 的人可能碰到 tar.xz也会想用单一命令搞定解压或压缩。其实不行 tar里面没有征对xz格式的参数比如 z是针对 gzip,j是针对 bzip2。

创建tar.xz文件:只要先 tar cvf xxx.tar xxx/ 这样创建xxx.tar文件先,然后使用 xz -z xxx.tar 来将 xxx.tar压缩成为 xxx.tar.xz

解压tar.xz文件:先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。


———————————————

.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName

.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
———————————————
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName

.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
———————————————
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知

.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
———————————————
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z

解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
———————————————
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
———————————————
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
———————————————
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName
———————————————
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
———————————————
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf -
———————————————
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解压:sEx x FileName.*
压缩:sEx a FileName.* FileName

sEx只是调用相关程序,本身并无压缩、解压功能,请注意!

gzip 命令
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。

语法:gzip [选项] 压缩(解压缩)的文件名该命令的各选项含义如下:

-c 将输出写到标准输出上,并保留原有文件。-d 将压缩文件解压。-l 对每个压缩文件,显示下列字段:     压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名字-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。-t 测试,检查压缩文件是否完整。-v 对每一个压缩和解压的文件,显示文件名和压缩比。-num 用指定的数字 num 调整压缩的速度,-1 或 --fast 表示最快压缩方法(低压缩比),-9 或--best表示最慢压缩方法(高压缩比)。系统缺省值为 6。指令实例:

gzip *% 把当前目录下的每个文件压缩成 .gz 文件。gzip -dv *% 把当前目录下每个压缩的文件解压,并列出详细的信息。gzip -l *% 详细显示例1中每个压缩的文件的信息,并不解压。gzip usr.tar% 压缩 tar 备份文件 usr.tar,此时压缩文件的扩展名为.tar.gz。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

repo工具

repo只是google用Python脚本写的调用Git的一个脚本,主要是用来下载、管理Android项目的软件仓库。

1. 下载 repo 的地址: http://android.git.kernel.org/repo ,可以用 wget http://android.git.kernel.org/repo 或者 curl http://android.git.kernel.org/repo >~/bin/repo 来下载 repo ,chmod a+x  /bin/repo

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
mount umount 命令用来挂载U盘和卸载u盘的命令
挂载U盘  : mount -t vfat /dev/sda1 /mnt/usbdisk  
            "-t vfat" 挂载U盘的格式
卸载U盘: umount /mnt/usbdisk
注意:先在/mnt/文件夹下面创建一个usbdisk文件夹 ,挂载U盘需要权限,如果没有权限,请在命令前面加上sudo
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


nautilus  打开一个窗口,来管理文件
示例:打开当前目录窗口
nautilus .       //打开当前目录窗口

windeployqt:在qt的终端,运行命令,使得将程序诉需要的库拷贝到当前的目录
示例:
windeployqt *.exe   // 这样就可以将程序诉需要的库放在当前程序*.exe的当前目录


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

[root@www ~]# sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。


动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』


function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

示例:
demo.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main () 
{
printf ("hello world \n");
return 0;
}

执行命令:
$ sed -e "s/include/if/g" demo.c

输出结果:
$ sed -e "s/include/if/g" demo.c
$ #no <stdio.h>
$ #no <stdlib.h>
$ #no <string.h>
$ int main () 
$ {
$ printf ("hello world \n");
$ return 0;
$ }

即:将文件中include字符替换成no字符串,然后输出


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

umask :
当我们登录系统之后创建一个文件总是有一个默认 权限 的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户 创建 文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“ 补码 ”,而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久 定义 自己的umask值。

一般格式

umask [选项] [ 掩码]
该命令用来设置限制新文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行,并自动设置掩码改变默认值,新的权限将会把旧的 覆盖
选项及其含义如下。
-S:显示当前的掩码。
umask是从权限中“拿走”相应的位,且文件创建时不能赋予 执行权限。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

命令:awk

使用方法

awk '{pattern + action}' {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

 

调用awk

有三种方式调用awk

复制代码
1.命令行方式
awk [-F  field-separator]  'commands'  input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

2.shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk

3.将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。
复制代码

 本章重点介绍命令行方式。

 

awk实例

假设last -n 5的输出如下

[root@www ~]# last -n 5 <==仅取出前五行
root     pts/1   192.168.1.100  Tue Feb 10 11:21   still logged in
root     pts/1   192.168.1.100  Tue Feb 10 00:46 - 02:28  (01:41)
root     pts/1   192.168.1.100  Mon Feb  9 11:41 - 18:30  (06:48)
dmtsai   pts/1   192.168.1.100  Mon Feb  9 11:41 - 11:41  (00:00)
root     tty1                   Fri Sep  5 14:09 - 14:10  (00:01)

如果只是显示最近登录的5个帐号

#last -n 5 | awk  '{print $1}'
root
root
root
dmtsai
root

awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。

 

如果只是显示/etc/passwd的账户

#cat /etc/passwd |awk  -F ':'  '{print $1}'  
root
daemon
bin
sys

这种是awk+action的示例,每行都会执行action{print $1}。

-F指定域分隔符为':'。

 

如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

#cat /etc/passwd |awk  -F ':'  '{print $1"\t"$7}'
root    /bin/bash
daemon  /bin/sh
bin     /bin/sh
sys     /bin/sh

 

如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。

复制代码
cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'
name,shell
root,/bin/bash
daemon,/bin/sh
bin,/bin/sh
sys,/bin/sh
....
blue,/bin/nosh
复制代码

awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

 

搜索/etc/passwd有root关键字的所有行

#awk -F: '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash

这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。

搜索支持正则,例如找root开头的: awk -F: '/^root/' /etc/passwd

 

搜索/etc/passwd有root关键字的所有行,并显示对应的shell

# awk -F: '/root/{print $7}' /etc/passwd             
/bin/bash

 这里指定了action{print $7}


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

命令:bc

bc的简单用法


bc是Linux内置中的计算器,能够处理浮点数的计算,看下面的应用例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@node2 ~]# bc
bc  1.06 . 95
Copyright  1991 - 1994 1997 1998 2000 2004 2006  Free Software Foundation, Inc.
This  is  free software  with  ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3 * 5
15
3.5 / 6
0
scale= 4
3.5 / 6
. 5833
quit
[root@node2 ~]#

浮点运算是由一个内建的成为scale的变量控制的,默认是0。可以从上面的例子看出,当不声明scale时,3.5/6的输出是0,当声明scale=4时,3.5/6的输出时0.5833


bc在脚本中的运用


当在脚本中要处理浮点数计算时,就可以使用bc计算器,先看下面的例子

1
2
3
4
5
6
7
[root@node2 tmp]# cat bc.sh
#!/bin/bash
#
num1=`echo  "scale=3; 4.3/7"  | bc`
echo $num1
[root@node2 tmp]# ./bc.sh
. 614

当碰到较短的运算时,就可以使用这种方法

1
var iable=`echo  "options; expression"  | bc`


但是如果你计算较为复杂的话,在同一个命令中一次性列出多个

表达式会比较麻烦。这时,就可以bc命令的输入重定向了。

使用内联输入重定向:

1
2
3
4
5
6
var iable=`bc << EOF
options
statements
expressions
EOF
`

先看看下面的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@node2 tmp]# cat bc.sh
#!/bin/bash
#
num1= 14.5
num2= 5
num3= 32.4
num4=`bc << EOF
scale= 4
a=($num1 / $num2)
b=($num3 / $num2)
a + b
EOF
`
echo $num4
[root@node2 tmp]# ./bc.sh
9.3800

要注意的是在bash计算器中创建的变量a和b在shell脚本中是不能使用的。

#######################################################################################
截取字符串的8钟方法:
  假设有变量 var=http://www.aaa.com/123.htm.

1. # 号截取,删除左边字符,保留右边字符。

1. echo ${var#*//}

其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符

即删除 http://
结果是 :www.aaa.com/123.htm

2. ## 号截取,删除左边字符,保留右边字符。

1. echo ${var##*/}

##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符

即删除 http://www.aaa.com/

结果是 123.htm

3. %号截取,删除右边字符,保留左边字符

1.echo ${var%/*}

%/* 表示从右边开始,删除第一个 / 号及右边的字符

结果是:http://www.aaa.com

4. %% 号截取,删除右边字符,保留左边字符

1. echo ${var%%/*}

%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符

结果是:http:

5. 从左边第几个字符开始,及字符的个数

1. echo ${var:0:5}

其中的 0 表示左边第一个字符开始,5 表示字符的总个数。

结果是:http:

6. 从左边第几个字符开始,一直到结束。

1. echo ${var:7}

其中的 7 表示左边第8个字符开始,一直到结束。

结果是 :www.aaa.com/123.htm

7. 从右边第几个字符开始,及字符的个数

1. echo ${var:0-7:3}

其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。

结果是:123

8. 从右边第几个字符开始,一直到结束。

1. echo ${var:0-7}

表示从右边第七个字符开始,一直到结束。

结果是:123.htm

注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)


***************************************************************************************************************************

cut 命令---以行为单位,每一行为一个处理对象的,这种机制和sed是一样的。

cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢?

cut命令主要是接受三个定位方法:

第一,字节(bytes),用选项-b

第二,字符(characters),用选项-c

第三,域(fields),用选项-f

字节定位:格式:cut -b 1-5,8 (如果还有其他位置需要输出,则再用逗号隔开添加进去) 

举个例子吧,当你执行ps命令时,会输出类似如下的内容:
[rocrocket@rocrocket programming]$ who
rocrocket :0 2009-01-08 11:07
rocrocket pts/0 2009-01-08 11:23 (:0.0)
rocrocket pts/1 2009-01-08 14:15 (:0.0)

如果我们想提取每一行的第3个字节,就这样:
[rocrocket@rocrocket programming]$ who|cut -b 3
c
c

c

字符定位:格式:cut -c 1-5,8 与字节的定位格式相似

[rocrocket@rocrocket programming]$ cat cut_ch.txt
星期一
星期二
星期三
星期四
[rocrocket@rocrocket programming]$ cut -b 3 cut_ch.txt




[rocrocket@rocrocket programming]$ cut -c 3 cut_ch.txt



看到了吧,用-c则会以字符为单位,输出正常;而-b只会傻傻的以字节(8位二进制位)来计算,输出就是乱码。
既然提到了这个知识点,就再补充一句,如果你学有余力,就提高一下。
当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开。例子如下:
[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -b 2




[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 2

[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 1,2,3



域定位:格式:cut -d ':' -f 1-5,8  ------- -d 设置“间隔符”,-f设置“提取第几个域”,就OK了!

以/etc/passwd的前五行内容为例:
[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1-5,8
root
bin
daemon
adm

lp

****************************************************************************************************************

tee命令:用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。

$ ls | tee out.txt
1.sh
1.txt
2.txt
eee.tst
EEE.tst
one
out.txt
string2
www.pdf
WWW.pdf
WWW.pef

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值