Shell编程基础

来源:互联网 发布:淘宝信用支付怎么开通 编辑:程序博客网 时间:2024/05/30 20:08

Linux Shell编程基础

1.   Linux 基本命令

ls          显示文件或目录

    -l           列出文件详细信息l(list)

    -a          列出当前目录下所有文件及目录,包括隐藏的a(all)

mkdir        创建目录

    -p           创建目录,若无父目录,则创建p(parent)

cd              切换目录

touch         创建空文件

echo           输出Echo “helloworld” > test.out   (>>追加,<覆盖)

cat             查看文件内容

cp               拷贝

mv              移动或重命名

rm              删除文件

    -r            递归删除,可删除子目录及文件

    -f            强制删除

find             在文件系统中搜索某文件

wc               统计文本中行数、字数、字符数 wc [选项] 文件

grep            在文本文件中查找某个字符串 grep ‘字符串’ 文件名 

rmdir          移除指定目录 –p 若删除目录后父目录变为空则一块删除      

tree            树形结构显示目录,需要安装tree包

pwd             显示当前目录

ln                 创建链接文件

more、less  分页显示文本文件内容 more只能向后,less可以向前翻页

head、tail    显示文件头、尾内容  head –行数 文件名

ctrl+alt+F1 命令行全屏模式

 

系统管理命令

stat             显示指定文件的详细信息,比ls更详细

who              显示在线登陆用户

whoami         显示当前操作用户

hostname     显示主机名

uname          显示系统信息

top               动态显示当前耗费资源最多进程信息

ps                 显示瞬间进程状态 ps –aux ps -ef

du                 查看目录大小 du -h /home带有单位显示目录信息

df                 查看磁盘大小 df -h 带有单位显示磁盘信息

ifconfig         查看网络情况

ping               测试网络连通

netstat         显示网络状态信息

man               命令不会用了,找男人  如:man ls

clear             清屏

alias              对命令重命名 如:aliasshowmeit="ps -aux" ,另外解除使用unaliaxshowmeit

kill                杀死进程,可以先用ps 或 top命令查看进程的id,然后再用kill命令杀死进程。

 

打包压缩相关命令

gzip:

bzip2:

tar:               打包压缩

    -c              归档文件

    -x              压缩文件

    -z              gzip压缩文件

    -j              bzip2压缩文件

    -v              显示压缩或解压缩过程 v(view)

    -f              使用档名

例:

tar -cvf/home/abc.tar /home/abc              只打包,不压缩

tar -zcvf/home/abc.tar.gz /home/abc        打包,并用gzip压缩

tar -jcvf/home/abc.tar.bz2 /home/abc      打包,并用bzip2压缩

当然,如果想解压缩,就直接替换上面的命令  tar-cvf  / tar -zcvf  / tar -jcvf 中的“c” 换成“x” 就可以了。

 

关机/重启机器

shutdown

    -r             关机重启

    -h             关机不重启

    now          立刻关机

halt              关机

reboot         重启

 

Linux管道

将一个命令的标准输出作为另一个命令的标准输入。也就是把几个命令组合起来使用,后一个命令除以前一个命令的结果。

例:grep -r "close" /home/* |more       在home目录下所有文件中查找,包括close的文件,并分页输出。

 

Linux软件包管理

dpkg (Debian Package)管理工具,软件包名以.deb后缀。这种方法适合系统不能联网的情况下。

比如安装tree命令的安装包,先将tree.deb传到Linux系统中。再使用如下命令安装。

sudo dpkg -itree_1.5.3-1_i386.deb         安装软件

sudo dpkg -rtree                                    卸载软件

 

注:将tree.deb传到Linux系统中,有多种方式。VMwareTool,使用挂载方式;使用winSCP工具等;

APT(AdvancedPackaging Tool)高级软件工具。这种方法适合系统能够连接互联网的情况。

依然以tree为例

sudo apt-getinstall tree                        安装tree

sudo apt-getremove tree                      卸载tree

sudo apt-getupdate                                更新软件

sudo apt-getupgrade        

 

将.rpm文件转为.deb文件

.rpm为RedHat使用的软件格式。在Ubuntu下不能直接使用,所以需要转换一下。

sudo alienabc.rpm

 

vim使用

vim三种模式:命令模式、插入模式、编辑模式。使用ESC或i或:来切换模式。

命令模式下:

:q                     退出

:q!                    强制退出

:wq                  保存并退出

:set number    显示行号

:set nonumber 隐藏行号

/apache           在文档中查找apache 按n跳到下一个,shift+n上一个

yyp                  复制光标所在行,并粘贴

h(左移一个字符←)、j(下一行↓)、k(上一行↑)、l(右移一个字符→)

 

用户及用户组管理

/etc/passwd   存储用户账号

/etc/group      存储组账号

/etc/shadow   存储用户账号的密码

/etc/gshadow 存储用户组账号的密码

useradd 用户名

userdel 用户名

adduser 用户名

groupadd 组名

groupdel 组名

passwd root    给root设置密码

su root

su -root 

/etc/profile    系统环境变量

bash_profile    用户环境变量

.bashrc             用户环境变量

su user             切换用户,加载配置文件.bashrc

su - user           切换用户,加载配置文件/etc/profile ,加载bash_profile

更改文件的用户及用户组

sudo chown [-R]owner[:group] {File|Directory}

例如:还以jdk-7u21-linux-i586.tar.gz为例。属于用户hadoop,组hadoop

要想切换此文件所属的用户及组。可以使用命令。

sudo chownroot:root jdk-7u21-linux-i586.tar.gz

 

文件权限管理

三种基本权限

R          读        数值表示为4

W         写        数值表示为2

X          可执行 数值表示为1

如:jdk-7u21-linux-i586.tar.gz文件的权限为-rw-rw-r--

-rw-rw-r--一共十个字符,分成四段。

第一个字符“-”表示普通文件;这个位置还可能会出现“l”链接;“d”表示目录

第二三四个字符“rw-”表示当前所属用户的权限。   所以用数值表示为4+2=6

第五六七个字符“rw-”表示当前所属组的权限。     所以用数值表示为4+2=6

第八九十个字符“r--”表示其他用户权限。             所以用数值表示为2

所以操作此文件的权限用数值表示为662 

更改权限

sudo chmod [u所属用户  g所属组  o其他用户  a所有用户]  [+增加权限  -减少权限]  [r  w  x]   目录名 

例如:有一个文件filename,权限为“-rw-r----x” ,将权限值改为"-rwxrw-r-x",用数值表示为765

sudo chmod u+xg+w o+r  filename

上面的例子可以用数值表示

sudo chmod 765filename

2.   管道,重定向和 backtick

管道 (|) 将一个命令的输出作为另外一个命令的输入。 

grep"hello" file.txt | wc -l 
  在file.txt中搜索包含有”hello”的行并计算其行数。 
  在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。

重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。 

ps -ef |grep java
  > 写入文件并覆盖旧文件 
  >> 加到文件的尾部,保留旧文件内容。 

反短斜线 

使用反短斜线("`")可以将一个命令的输出作为另外一个命令的一个命令行参数。

find . -mtime -1-type f -print 

用来查找过去24小时(-mtime –2则表示过去48小时)内修改过的文件。如果您

想将所有查找到的文件打一个包,则可以使用以下脚本: 

#!/bin/sh 

# The ticks arebackticks (`) not normal quotes ('): 

tar -zcvflastmod.tar.gz `find . -mtime -1 -type f -print` 

 

Test 检查文件和比较值 等于表达式[]

 1)判断表达式

  if test  (表达式为真)

  if test !表达式为假

  test 表达式1 –a 表达式2                 两个表达式都为真

  test 表达式1 –o 表达式2                两个表达式有一个为真

  2)判断字符串

  test –n 字符串                                  字符串的长度非零

  test –z 字符串                                   字符串的长度为零

  test 字符串1=字符串2                   字符串相等

  test 字符串1!=字符串2              字符串不等

  3)判断整数

  test 整数1 –eq 整数2                       整数相等

  test 整数1 –ge 整数2                       整数1大于等于整数2

  test 整数1 –gt 整数2                        整数1大于整数2

  test 整数1 –le 整数2                        整数1小于等于整数2

  test 整数1 –lt 整数2                         整数1小于整数2

  test 整数1 –ne 整数2                       整数1不等于整数2

  4)判断文件

  test  File1–ef File2                           两个文件具有同样的设备号和i结点号

  test  File1–nt  File2                           文件1比文件2 新

  test  File1–ot File2                           文件1比文件2 旧

  test –bFile                                          文件存在并且是块设备文件

  test –cFile                                          文件存在并且是字符设备文件

  test –d File                                          文件存在并且是目录

  test –eFile                                          文件存在

  test –fFile                                           文件存在并且是正规文件

  test –gFile                                          文件存在并且是设置了组ID

  test –GFile                                          文件存在并且属于有效组ID

  test –hFile                                          文件存在并且是一个符号链接(同-L)

  test –kFile                                          文件存在并且设置了sticky位

  test –bFile                                          文件存在并且是块设备文件

  test –LFile                                          文件存在并且是一个符号链接(同-h)

  test –oFile                                          文件存在并且属于有效用户ID

  test –pFile                                          文件存在并且是一个命名管道

  test –rFile                                           文件存在并且可读

  test –sFile                                          文件存在并且是一个套接字

  test –tFD                                            文件描述符是在一个终端打开的

  test –uFile                                          文件存在并且设置了它的set-user-id位

  test –wFile                                         文件存在并且可写

  test –xFile                                          文件存在并且可执行


 

 

3.    流程控制

If else:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

For

for var in item1item2 ... itemN

do

   command1

   command2

    ...

   commandN

done

While

while condition
do
    command
done

until

until condition
do
    command
done

Case

case  in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2
    command1
    command2
    ...
    commandN
    ;;
esac

Vim中文乱码

修改当前:

set encoding=utf-8 termencoding=gbk fileencoding=utf-8

永久修改:

修改文件/etc/vimrc   或者在~/.vimrc

set fileencodings=utf-8,gb2312,gbk,gb18030

set termencoding=utf-8

set fileformats=unix

set encoding=prc


 

 

4.    函数

定义格式:

[ function ] funname [()]

 

{

 

    action;

 

    [return int;]

 

}

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum  $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

$#

传递到脚本的参数个数

$*

以一个单字符串显示所有向脚本传递的参数

$$

脚本运行的当前进程ID

$!

后台运行的最后一个进程的ID

$@

$*相同,但是使用时加引号,并在引号中返回每个参数

$-

显示Shell使用的当前选项,与set命令功能相同。

$?

显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

原创粉丝点击