Shell编程入门
1. Shell入门
开发步骤如下:
2. 变量定义
[hadoop@mini shell]$ set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell: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]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.1.2(1)-release'
COLORS=/etc/DIR_COLORS
COLUMNS=112
DIRSTACK=()
EUID=500
GROUPS=()
G_BROKEN_FILENAMES=1
HISTCONTROL=ignoredups
HISTFILE=/home/hadoop/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/home/hadoop
HOSTNAME=mini
HOSTTYPE=x86_64
IFS=$' tn'
LANG=en_US.UTF-8
LESSOPEN='||/usr/bin/lesspipe.sh %s'
LINES=38
LOGNAME=hadoop
LS_COLORS= ... ##太多了 忽略掉。。。
MACHTYPE=x86_64-redhat-linux-gnu
MAIL=/var/spool/mail/hadoop
MAILCHECK=60
OLDPWD=/home/hadoop
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/hadoop/bin
PIPESTATUS=([0]="0")
PPID=3893
PS1='[u@h W]$ '
PS2='> '
PS4='+ '
PWD=/home/hadoop/shell
SELINUX_LEVEL_REQUESTED=
SELINUX_ROLE_REQUESTED=
SELINUX_USE_CURRENT_RANGE=
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_CLIENT='192.168.254.1 54236 22'
SSH_CONNECTION='192.168.254.1 54236 192.168.254.128 22'
SSH_TTY=/dev/pts/0
TERM=vt100
UID=500
USER=hadoop
_=clear
colors=/etc/DIR_COLORS
上面的代码中我们可以看到熟悉的变量,如BASH,PWD,USER 等等,接下来我们可以在客户端直接使用该命令: [hadoop@mini shell]$ set | grep PWD
OLDPWD=/home/hadoop
PWD=/home/hadoop/shell
[hadoop@mini shell]$ cd ..
[hadoop@mini ~]$ set | grep PWD
OLDPWD=/home/hadoop/shell
PWD=/home/hadoop
自定义变量的读写如下,这里需要注意的是,不同的ssh客户端下,自定义变量是无法共享的,并且在声明变量的时候等号前后不能出现空格,值的使用最好加上双引号,这样可以防止值的内容出现空格造成不必要的麻烦: [root@mini ~]# hero=luban
[root@mini ~]# echo $hero
luban
[root@mini ~]# str="hello world"
[root@mini ~]# echo $str
hello world
#当取变量的时候发现字符串连在一起:
[root@mini ~]# people=aidisheng
[root@mini ~]# echo "aidisheng's food"
aidisheng's food [root@mini ~]# echo "${people}'s food" aidisheng's food #对于变量的删除 可以使用unset命令 [root@mini ~]# unset people [root@mini ~]# echo "${people}'s food" 's food
#普通的变量是允许修改的,而声明了readonly的变量是不允许修改的
[root@mini ~]# helloworld="hello world"
[root@mini ~]# helloworld="hello world2"
[root@mini ~]# unset helloworld
[root@mini ~]# readonly helloworld="hello world"
[root@mini ~]# helloworld="hello world2"
-bash: helloworld: readonly variable
export: 可以将当前变量修改为本进程的变量,并允许子进程使用(不包括父进程),如下: [hadoop@mini shell]$ vi a.sh
#!/bin/bash
a=aaaaaa
echo "a=$a"
./b.sh
[hadoop@mini shell]$ vi b.sh
#!/bin/bash
echo "b file--->a=$a"
[hadoop@mini shell]$ ./a.sh
a=aaaaaa
b file--->a=
source: 将当前某个sh文件放到当前进程中运行,也可以使用 . 来代替,如下代码,因为b.sh运行啊a.sh所在的进程里面,当然可以访问a变量的值: [hadoop@mini shell]$ vi a.sh
#!/bin/bash
a=aaaaaa
echo "a=$a"
source ./b.sh
3. 变量的操作
4. 条件语句if 条件语句:
三元运算符: ? [ condition ] && echo OK || echo notOK ? 条件满足,执行&&后面的语句;条件不满足,执行||后面的语句。 对于双重条件的判断,可以使用 [[ ]] 来解决: 整数比较: ? -lt 小于 ? -le 小于等于 ? -eq 等于 ? -gt 大于 ? -ge 大于等于 ? -ne 不等于 if [ 1 -lt 3 ] 文件判断: ? -d 是否是目录 if [ -d /bin ] ? -f 是否为文件 if [ -f /bin/ls ] ? -e 是否存在 if [ -e /bin/ls ] 如果一个函数需要传递参数 可以在调用的时候在后面传递参数,在函数内部 可以使用 同时,使用$#可以查看参数的个数。 如果想跨进程调用函数,应该这么写: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |