shell四大变量与实例

简介:

  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 ~]#

双引号&ldquo;&rdquo;:允许通过$符号引用其他变量值

单引号&lsquo;&rsquo;:禁止引用其他变量值,$视为普通字符

反撇号``:将命令执行的结果输出给变量

#echo &ldquo;aaaaaaaaaaaaaaaaaaaaa&rdquo; 

#echo &ldquo;aaaaaaa $a aaaaaaaaa&rdquo;

#echo &lsquo;aaaaaaa $a aaaaaaaaa&rsquo;

#echo &ldquo;aaaaaaaaaa$aaaaaaaaaaa&rdquo;


[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

相关文章
|
1天前
|
存储 Shell C语言
shell脚本 编程 变量 基本入门(详解)
shell脚本 编程 变量 基本入门(详解)
|
14天前
|
Shell Python
python 和shell 变量互相传递
python 和shell 变量互相传递
24 0
|
28天前
|
Shell
shell学习(三)【shell变量、数组,文件命令、特殊变量】
shell学习(三)【shell变量、数组,文件命令、特殊变量】
14 0
|
28天前
|
Shell
shell 命令(一)概述【别名、 bash重定向 、定义变量】
shell 命令(一)概述【别名、 bash重定向 、定义变量】
22 0
|
1月前
|
Shell Linux
|
1月前
|
Shell
【shell】shell命令行放在变量中执行以及变量的常用方法
【shell】shell命令行放在变量中执行以及变量的常用方法
|
2月前
|
存储 Shell Linux
【Shell 命令集合 系统设置 内建命令】⭐Linux 声明变量的属性和类型 declare命令 使用指南
【Shell 命令集合 系统设置 内建命令】⭐Linux 声明变量的属性和类型 declare命令 使用指南
31 0
|
3月前
|
Shell
shell系统给定变量大全——及使用方法
shell系统给定变量大全——及使用方法
23 0
|
3月前
|
存储 Shell Linux
Linux的shell命令——变量用法
Linux的shell命令——变量用法
34 0
|
3月前
|
Shell Linux
Linux下的Shell基础——变量、运算符、条件判断(二)
Linux下的Shell基础——变量、运算符、条件判断(二)
49 0