bash的常用功能
查看历史命令:#history
[root@localhost ~]# history
1 ifconfig
2 exit
3 ifconfig
4 system-config-service
5 system-config-services
6 ifconfig
7 ifup eth0
8 service network restart
9 ifconfig
10 ifup eth0
11 service network restart
12 ifconfig
13 service network restart
14 vim /etc/sysconfig/network-scripts/ifcfg-eth0
15 vim /etc/udev/rules.d/70-persistent-net.rules
16 reboot
17 exit
18 vi /etc/sysconfig/network-scripts/ifcfg-eth0
19 service network restart
想要执行某个历史命令可以使用:#!n 比如199 #!199
28 cd
29 ll
30 history
[root@localhost ~]# !29 例如29 ll 命令
ll
总用量 96
-rw-------. 1 root root 1606 2月 26 22:36 anaconda-ks.cfg
-rw-r--r--. 1 root root 44311 2月 26 22:36 install.log
-rw-r--r--. 1 root root 10727 2月 26 22:34 install.log.syslog
drwxr-xr-x. 2 root root 4096 2月 26 22:39 公共的
drwxr-xr-x. 2 root root 4096 2月 26 22:39 模板
drwxr-xr-x. 2 root root 4096 2月 26 22:39 视频
drwxr-xr-x. 2 root root 4096 2月 26 22:39 图片
drwxr-xr-x. 2 root root 4096 2月 26 22:39 文档
drwxr-xr-x. 2 root root 4096 2月 26 22:39 下载
drwxr-xr-x. 2 root root 4096 2月 26 22:39 音乐
drwxr-xr-x. 2 root root 4096 2月 26 22:39 桌面
!str:执行历史记录中以“str”开头的命令,设置记录历史命令的条数
[root@localhost ~]# !l 它会执行离本次命令最近的l命令——》ll
ll
总用量 96
-rw-------. 1 root root 1606 2月 26 22:36 anaconda-ks.cfg
-rw-r--r--. 1 root root 44311 2月 26 22:36 install.log
-rw-r--r--. 1 root root 10727 2月 26 22:34 install.log.syslog
drwxr-xr-x. 2 root root 4096 2月 26 22:39 公共的
drwxr-xr-x. 2 root root 4096 2月 26 22:39 模板
drwxr-xr-x. 2 root root 4096 2月 26 22:39 视频
drwxr-xr-x. 2 root root 4096 2月 26 22:39 图片
drwxr-xr-x. 2 root root 4096 2月 26 22:39 文档
drwxr-xr-x. 2 root root 4096 2月 26 22:39 下载
drwxr-xr-x. 2 root root 4096 2月 26 22:39 音乐
drwxr-xr-x. 2 root root 4096 2月 26 22:39 桌面
[root@localhost ~]#
清除历史命令:#history -c
[root@localhost ~]# history -c
[root@localhost ~]# history 清除完成后会看到历史命令为空
1 history
[root@localhost ~]#
#alias 查看命令的别名 我们也可以自己设置比如:
[root@localhost ~]# 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'
[root@localhost ~]#
#alias test="ls -l"
[root@localhost ~]# alias test='ls -l'
[root@localhost ~]# test
总用量 96
-rw-------. 1 root root 1606 2月 26 22:36 anaconda-ks.cfg
-rw-r--r--. 1 root root 44311 2月 26 22:36 install.log
-rw-r--r--. 1 root root 10727 2月 26 22:34 install.log.syslog
drwxr-xr-x. 2 root root 4096 2月 26 22:39 公共的
drwxr-xr-x. 2 root root 4096 2月 26 22:39 模板
drwxr-xr-x. 2 root root 4096 2月 26 22:39 视频
drwxr-xr-x. 2 root root 4096 2月 26 22:39 图片
drwxr-xr-x. 2 root root 4096 2月 26 22:39 文档
drwxr-xr-x. 2 root root 4096 2月 26 22:39 下载
drwxr-xr-x. 2 root root 4096 2月 26 22:39 音乐
drwxr-xr-x. 2 root root 4096 2月 26 22:39 桌面
[root@localhost ~]# unalias test
[root@localhost ~]# alias test=ls -l
-bash: alias: -l: not found
[root@localhost ~]# alias test="ls -l"
[root@localhost ~]# test
总用量 96
-rw-------. 1 root root 1606 2月 26 22:36 anaconda-ks.cfg
-rw-r--r--. 1 root root 44311 2月 26 22:36 install.log
-rw-r--r--. 1 root root 10727 2月 26 22:34 install.log.syslog
drwxr-xr-x. 2 root root 4096 2月 26 22:39 公共的
drwxr-xr-x. 2 root root 4096 2月 26 22:39 模板
drwxr-xr-x. 2 root root 4096 2月 26 22:39 视频
drwxr-xr-x. 2 root root 4096 2月 26 22:39 图片
drwxr-xr-x. 2 root root 4096 2月 26 22:39 文档
drwxr-xr-x. 2 root root 4096 2月 26 22:39 下载
drwxr-xr-x. 2 root root 4096 2月 26 22:39 音乐
drwxr-xr-x. 2 root root 4096 2月 26 22:39 桌面
[root@localhost ~]#
#test 也就等于敲了ls -l 查看命令
#unalias test 取消test="ls -l"设置
> 输出 比如ll > one.txt >后面要养成留空格的习惯> one.txt,不留空格有时候会报错,系统识别不了
< 输入 比如cat <one.txt
>> 将命令执行的结果追加输出到指定文件
2> 清空指定文件的内容,并将标准错误信息保存到该文件
2>> 将标准的错误信息追加输出到指定的文件中
&> 将标准输出,标准错误输出的内容全部保存到指定文件,而不是直接显示在屏幕上
0 标准输入 一般从键盘输入
1 标准的输出 正确的输出
2 错误的输出
前提是我们先写一个shell脚本
# ls -l &&1111111&>one2.txt
[root@localhost ~]# ./a.sh &>one
[root@localhost ~]# cat one
anaconda-ks.cfg
a.sh
install.log
install.log.syslog
one
公共的
模板
视频
图片
文档
下载
音乐
桌面
./a.sh: line 4: 111111111111111: command not found
[root@localhost ~]# cat a.sh
#!/bin/bash
#a.sh
ls
111111111111111
[root@localhost ~
shell变量的应用
#a=100
[root@localhost ~]# a=100
[root@localhost ~]# echo $a
100
#set 查看系统中所有的变量 局部变量和全局变量
[root@localhost ~]# set | more
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_she
ll:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")
BASH_VERSION='4.1.2(1)-release'
COLORS=/etc/DIR_COLORS
COLUMNS=111
CVS_RSH=ssh
DIRSTACK=()
DISPLAY=localhost:10.0
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
#env 专门查看全局变量
[root@localhost ~]# env
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.0.124 1075 22
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib/qt-3.3
QTINC=/usr/lib/qt-3.3/include
SSH_TTY=/dev/pts/0
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*
变量的赋值与运算
#echo $a 输出变量a的值
[root@localhost ~]# echo $a
100
[root@localhost ~]#
#expr $a + $a 计算a+a的值
#expr $a \* $a 计算a*a的值 \屏蔽特殊字符的意义
[root@localhost ~]# expr $a + $a
200
[root@localhost ~]# expr $a \* $a
10000
[root@localhost ~]#
[root@localhost ~]# expr 2 % 1 取余
0
You have mail in /var/spool/mail/root
[root@localhost ~]#
[root@localhost ~]# expr 2 / 1
2
[root@localhost ~]#
双引号“”:允许通过$符号引用其他变量值
单引号‘’:禁止引用其他变量值,$视为普通字符
反撇号``:将命令执行的结果输出给变量
#echo “aaaaaaaaaaaaaaaaaaaaa”
#echo “aaaaaaa $a aaaaaaaaa”
#echo ‘aaaaaaa $a aaaaaaaaa’
#echo “aaaaaaaaaa$aaaaaaaaaaa”
[root@localhost ~]# echo "aaaaaaaaaaaaaaa"
aaaaaaaaaaaaaaa
[root@localhost ~]# echo "aaaaaaaaa $a aaaaa"
aaaaaaaaa 100 aaaaa
[root@localhost ~]# echo 'aaaaaaaaa $a aaaaa'
aaaaaaaaa $a aaaaa
[root@localhost ~]# echo 'aaaaaaaaa$aaaaaa'
aaaaaaaaa$aaaaaa
[root@localhost ~]# echo "aaaaaaaaa$aaaaaa" 忽略后面$aaaaaaa的变量,没找到匹配的变量
aaaaaaaaa
[root@localhost ~]#
[root@localhost ~]# echo "aaaaaa${a}aaaaaaaaaa"
aaaaaa100aaaaaaaaaa
[root@localhost ~]#
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
hgfs
[root@localhost mnt]# echo `ll`
总用量 4 drwxr-xr-x. 2 root root 4096 2月 27 00:58 hgfs
[root@localhost mnt]#
[root@localhost ~]# cat a.sh
#!/bin/bash
#a.sh
str="this is a boy"
a=11111111111111111111$str
b=222222222222222222222$str
c=33333333333333333333$str
echo $a
echo $b
echo $c
[root@localhost ~]# ./a.sh
11111111111111111111this is a boy
222222222222222222222this is a boy
33333333333333333333this is a boy
[root@localhost ~]# vi a.sh
[root@localhost ~]# ./a.sh
11111111111111111111this is a test
222222222222222222222this is a test
33333333333333333333this is a test
[root@localhost ~]# cat a.sh
#!/bin/bash
#a.sh
str="this is a test"
a=11111111111111111111$str
b=222222222222222222222$str
c=33333333333333333333$str
echo $a
echo $b
echo $c
[root@localhost ~]#
怎么把局部变量变成全局变量:export
[root@localhost ~]# www=1000
[root@localhost ~]# echo $www
1000
[root@localhost ~]# vi a.sh
[root@localhost ~]# cat a.sh
#!/bin/bash
#a.sh
echo $www
[root@localhost ~]# ./a.sh
[root@localhost ~]# export www
[root@localhost ~]# ./a.sh
1000
[root@localhost ~]# env
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=100
SSH_CLIENT=192.168.0.131 2752 22
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib/qt-3.3
QTINC=/usr/lib/qt-3.3/include
SSH_TTY=/dev/pts/1
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
www=1000
LOGNAME=root
QTLIB=/usr/lib/qt-3.3/lib
CVS_RSH=ssh
SSH_CONNECTION=192.168.0.131 2752 192.168.0.1 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
DISPLAY=localhost:10.0
G_BROKEN_FILENAMES=1
_=/bin/env
[root@localhost ~]#
清除变量
[root@localhost ~]# unset www
[root@localhost ~]# echo $www
[root@localhost ~]#
位置变量
表示为$n,n为1~9之间的数字
案例:
[root@localhost ~]# cat a.sh
#!/bin/bash
#a.sh
echo $1 ●位置变量1
echo $2 ●位置变量2
echo $3 ●位置变量3
echo $# ●位置变量的个数
echo $* ●位置变量的内容
echo $0 ●位置变量的程序名
[root@localhost ~]# ./a.sh a b c d e 执行此脚本
a
b
c
5
a b c d e
./a.sh
[root@localhost ~]#
此案例针对$?,如果命令输出正确,$?输出的值将是0,如果执行错误输出的值将是非0
[root@localhost ~]# cat a.sh
#!/bin/bash
#a.sh
ls >> /dev/null /dev/null先相当于windows的垃圾箱,但是他是个无底洞,垃圾归档到这
echo $?
echo "##########" 不论输出正确与否我们都将输出结果归档到这
1111111111 >> /dev/null
echo $?
[root@localhost ~]# ./a.sh
0
##########
./a.sh: line 6: 1111111111: command not found 执行错误
127 输出的结果127非0
[root@localhost ~]#
预定义变量
表示形式如下
≌ $#:命令行中的位置参数的个数
≌ $*所有位置参数的内容
≌ $?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
≌ $$:当前所在进程的进程号
≌ $!:后台运行的最后一个进程号
≌ $0:当前执行的进程/程序名
shell脚本的案例:
◎每周五17:30清理ftp服务器的公共目录
检查/var/ftp/pub目录,将其中所有子目录及文件的详细列表、当时的时间信息追加保存到/var/log/pubdir.log文件中。
[root@localhost ~]# vi a.sh
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# chmod 755 a.sh
[root@localhost ~]# cat a.sh
#!/bin/bash
#a.sh
ls -lhR /var/ftp/pub >> /var/log/pubdir.log R也是一种打印列表的方式
date >> /var/log/pubdir.log
rm -rf /var/ftp/pub/*
[root@localhost ~]# crontab -l
30 17 * * 5 a.sh
注意;你所编写的shell脚本要有可执行的权限755,a+x都行;
shell脚本的执行可以用. a.sh ./a.sh sh a.sh 等等来执行。
本文转自青衫解衣 51CTO博客,原文链接:http://blog.51cto.com/215687833/1181616