首页 > 系统管理 > Shell编程基础一
2015
04-12

Shell编程基础一

一、基础命令

1、history  记录历史命令

预设记录1000条命令,存储在用户家目录 .bash_history 文件中;

  • !!     执行上一条命令

  • !n    n为数字,history里面显示的指令数字

  • !cat    执行最近一次以cat开头的命令

  • !$    上一条命令的最后一个参数

man builtin    可以查询系统内置的所有命令;

2、指令和文件名补全

Tab键    连续按2次列出所有的指令或文件名;

3、别名alias

自定义别名,把很长的经常使用的命令别名一个简单的命令

[root@yonglinux ~]# alias yong="cat /etc/sysconfig/network-scripts/ifcfg-eth0"
[root@yonglinux ~]# yong
DEVICE=eth0
HWADDR=00:0C:29:43:3D:32
TYPE=Ethernet
UUID=0b1f4512-cefa-4a9e-ae85-adb2ac2a9903
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.20.20
NETMASK=255.255.255.0
GATEWAY=192.168.20.2

4、unalias    解除别名

别名永久生效的话,把命令写入到当前用户家目录 .bashrc里面;只对当前用户生效。

5、输入输出重定向

  • 输出重定向 > 把前面的输出不显示在当前屏幕上,输出到指定文件里面;

  • 追加重定向 >> 把内容追加到文件里面;

  • 输入重定向 <    把后面的文件作为前面命令的输入;

  • 2>        错误重定向(写脚本的时候会用到)

  • 2>>     错误追加重定向

[root@localhost ~]# ls -l /dev/stdin 
lrwxrwxrwx. 1 root root 15 4月   6 11:04 /dev/stdin -> /proc/self/fd/0
[root@localhost ~]# ls -l /dev/stdout 
lrwxrwxrwx. 1 root root 15 4月   6 11:04 /dev/stdout -> /proc/self/fd/1
[root@localhost ~]# ls -l /dev/stderr 
lrwxrwxrwx. 1 root root 15 4月   6 11:04 /dev/stderr -> /proc/self/fd/2
  • 标准输入设备stdin用0表示;键盘;

  • 标准输出设备 stdout用1表示,显示器显示;

  • 标准输出错误 stderr用2表示,显示器显示;

5.1、示例:直接ls 会在当前屏幕显示出来,正确和错误的信息;

[root@localhost ~]# ls /etc/passwd /etc/passwd1
ls: 无法访问/etc/passwd1: 没有那个文件或目录
/etc/passwd
[root@localhost ~]# ls /etc/passwd /etc/passwd1 >1.log 2>&1
[root@localhost ~]# cat 1.log
 ls: 无法访问/etc/passwd1: 没有那个文件或目录
 /etc/passwd

正确输出1默认可以不用写,直接重定向到1.log里面,2代表错误输出,重定向到&1代表前面的1.log;有时候也可以>>追加到日志;

6、管道符 

把前面命令的输出结果作为后面命令的输入

[root@yonglinux ~]# cat /etc/passwd | wc -l
25

7、作业控制

当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c)

jobs    可以查看被暂停或在后台运行的任务

[root@yonglinux ~]# vmstat 1 > /tmp/1.log 
^Z
[1]-  Stopped                 vi file
[2]+  Stopped                 vmstat 1 > /tmp/1.log
[root@yonglinux ~]# jobs
[1]-  Stopped                 vi file
[2]+  Stopped                 vmstat 1 > /tmp/1.log
[root@yonglinux ~]# bg 2
[2]+ vmstat 1 > /tmp/1.log &
[root@yonglinux ~]# jobs
[1]+  Stopped                 vi file
[2]-  Running                 vmstat 1 > /tmp/1.log &

想要让进程在后台运行的话加 &,中间有空格,进程就在后台运行了。

vmstat 1    用来观察系统状态的一个命令。

fg 2 让后台运行的进程回到当前运行,ctrl+c 可以终止进程。

+号显示的为优先级最高。

另一种情况,关闭当前shell,重新打开另一个shell,使用jobs并不会显示在后台运行的进程。想要停止进程的话,需要知道pid,然后使用kill命令杀死进程。如遇到杀不死的进程,使用 kill -9 pid

[root@yonglinux ~]# ps aux | grep vmstat
root      1909  0.0  0.1   2016   548 pts/0    S    15:03   0:00 vmstat 1
root      1941  0.0  0.1   4356   732 pts/0    S+   15:08   0:00 grep vmstat
[root@yonglinux ~]# kill 1909

二、Shell变量

通常shell预设的变量名为大写。可以使用echo查看变量;

1、常用变量有:PATH、HOME、LANG、PWD、LOGNAME、HOSTNAME

[root@yonglinux ~]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@yonglinux ~]# echo $HOME
/root
[root@yonglinux ~]# echo $PWD
/root
[root@yonglinux ~]# echo $LOGNAME
root
[root@yonglinux ~]# echo $HOSTNAME
yonglinux.com
  • env   可以查看系统预设的所有环境变量;

  • set    可以列出系统预设的全部变量,包括用户自己设定的变量;

2、自定义变量    变量名=变量内容    

自定义变量只在当前shell下生效;bash命令打开一个新的shell,变量就不会生效,退出新shell后,回到当前shell,变量继续生效;

[root@yonglinux ~]# ABC=centos
[root@yonglinux ~]# echo $ABC
centos
[root@yonglinux ~]# bash
[root@yonglinux ~]# echo $ABC
[root@yonglinux ~]# exit
exit
[root@yonglinux ~]# echo $ABC
centos

3、变量永久生效的方法

3.1、系统下所有用户登录都可以使用该变量

在/etc/profile 配置文件中最后一行,添加"export myname=tshare365",然后执行source /etc/profile 生效;source命令的作用是,将目前设定的配置刷新,即不用注销再登录也能生效。

[root@yonglinux ~]# echo "export myname=tshare365" >> /etc/profile
[root@yonglinux ~]# source /etc/profile
[root@yonglinux ~]# su - user1
[user1@yonglinux ~]$ echo $myname 
tshare365

3.2、只在当前用户下使用变量

在用户的家目录下 .bashrc 配置文件,添加"export myname=tshare365",然后执行source .bashrc 生效;

[user1@yonglinux ~]$ pwd/home/user1
[user1@yonglinux ~]$ echo "export myname=tshare365" >> .bashrc
[user1@yonglinux ~]$ source .bashrc
[user1@yonglinux ~]$ echo $myname
tshare365

3.3、自定义变量的规则

1、设定变量的格式“变量名=变量内容”等号两边不能有空格

2、变量名只能由英文、数字及下划线组成,而且不能以数字开头;

3、当变量内容带有特殊字符(空格 $),需要加单引号;

[root@yonglinux ~]# ABC='linux centos'
[root@yonglinux ~]# echo $ABC
linux centos

4、如变量内容中本身有单引号,需要加双引号;

[root@yonglinux ~]# ABC="Linux'"
[root@yonglinux ~]# echo $ABC
Linux'

5、如果变量内容需要引用其他运行结果,需要使用反引号

[root@yonglinux ~]# ABC=`pwd`
[root@yonglinux ~]# echo $ABC
/root

6、变量内容可以累加其他变量的内容,需要加双引号。

[root@yonglinux ~]# AA="Angle"
[root@yonglinux ~]# echo $AA
Angle
[root@yonglinux ~]# AB="$AA"BB
[root@yonglinux ~]# echo $AB
AngleBB

单引号和双引号的区别,用双引号时不会取消掉里面出现的特殊字符的本身作用(这里的$),而使用单引号则里面的特殊字符全部失去它本身的作用。

7、pstree    以树状图显示当前系统的进程

当前shell下运行bash命令后,会进入一个新的shell,新shell为之前shell的子shell;

root@yonglinux ~]# pstree | grep bash
     |-login---bash
     |-sshd---sshd---bash-+-grep
[root@yonglinux ~]# bash
[root@yonglinux ~]# pstree | grep bash
     |-login---bash
     |-sshd---sshd---bash---bash-+-grep

在父shell中设定一个变量后,进入子shell后变量不会生效;需要在子shell中生效要用exprot指令;export 声明全局变量,让该shell的子shell也知道;如果export后面不加任何变量名,则它会声明所有的变量。

[root@yonglinux ~]# echo $AA
Angle
[root@yonglinux ~]# bash
[root@yonglinux ~]# echo $AA
[root@yonglinux ~]# exit
exit
[root@yonglinux ~]# export AA
[root@yonglinux ~]# bash
[root@yonglinux ~]# echo $AA
Angle

8、取消变量    unset 变量名

[root@yonglinux ~]# AB="Angle BB"
[root@yonglinux ~]# echo $AB
Angle BB
[root@yonglinux ~]# unset AB
[root@yonglinux ~]# echo $AB

3.3、系统环境变量与个人环境变量的配置文件

/etc/profile   系统预设的几个重要的变量,例如PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

/etc/bashrc    预设umask以及PS1等变量。PS1就是我们登录linux 命令行最前面显示的字符;

\u   用户users

\h   主机名hostname

\W   当前目录pwd

\$   系统用户为#,普通用户显示$

[root@yonglinux ~]# echo $PS1[\u@\h \W]\$
[root@localhost ~]# PS1='[\h@\u \W]\$'
[localhost@root ~]#

更改PS1的显示;

每个用户的主目录下还有几个这样的隐藏文件:

  • .bash_profile :定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。

  • .bashrc :该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。例如你可以将用户自定义的alias或者自定义变量写到这个文件中。

  • .bash_history :记录命令历史用的。

  • .bash_logout :当退出shell时,会执行该文件。可以把一些清理的工作放到这个文件中。




最后编辑:
作者:tshare365
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复