"参数1 参数2 ... " 形式保存所有参数
$@ 以"参数1" "参数2" ... 形式保存所有参数
$$ 本程序的(进程ID号)PID
$! 上一个命令的PID
其中使用得比较多得是 $n $# $0 $? ,看看下面的例子:
复制代码 代码如下:
#!/bin/sh
#This file is used to explain the shell system variable.
echo "the number of parameter is $# ";
echo "the return code of last command is $?";
echo "the script name is $0 ";
echo "the parameters are $* ";
echo "/$1 = $1 ; /$2 = $2 ";
下面是运行结果:
-bash-2.05b$ ./chapter2.1.sh winter stlchina
the number of parameter is 2
the return
code of last command is 0
the script name is ./chapter2.1.sh
the parameters are winter stlchina
$1 = winter ; $2 = stlchina
这个例子太简单了,一点也不实用,下面来个实用的,如果你看不懂,没有关系,后面的内容会有详细解释。
复制代码 代码如下:
#!/bin/sh
if [ $# -ne 2 ] ; then
echo "Usage: $0 string file";
exit 1;
fi
grep $1 $2 ;
if [ $? -ne 0 ] ; then
echo "Not Found \"$1\" in $2";
exit 1;
fi
echo "Found \"$1\" in $2";
上面的例子中使用了$0 $1 $2 $# $? 等变量,下面是程序的解释:
1.判断运行参数个数,如果不等于2,显示使用"用法帮助", 其中 $0 表示就是脚本自己。
2.用grep 在$2 文件中查找$1 字符串。
3.判断前一个命令运行后的返回值(一般成功都会返回0, 失败都会返回非0)。
4.如果没有成功显示没找到相关信息,否则显示找到了。
5.其中/"表示转义,在"" 里面还需要显示"号,则需要加上转义符/" .
下面运行的例子:
./chapter2.2.sh usage chapter2.2.sh
Not Found "usage" in
chapter2.2.sh
-bash-2.05b$ ./chapter2.2.sh Usage chapter2.2.sh
echo
"Usage: $0 string file";
Found "Usage" in
chapter2.2.sh
2 Shell用户变量
2.1 基础
不管系统变量有多少,对于需求来说,总是不够的。用户变量是最常用到的变量,使用也十分简单。
用户定义的变量必须由字母数字及下划线组成,并且变量名的第一个字符不能为数字, 与其它UNIX名字一样,变量名是大小写敏感的. 对于用户变量,用户可按如下方式赋值:
name="Winter"
在引用变量时,需在前面加$符号,用户也可以在变量间进行相互赋值,如:
name="Winter"
WINTER=$name
echo
"Hello $WINTER !"
输出结果应该很清楚:Hello Winter !
这里需要注意一点:变量和'='之间不要有空格,'='和赋值也不要有空格,否则shell不会认为变量被定义。掌握了基本的使用方法,你可以完全开始你的编程工作了。不过有时候需要未雨绸缪,下面介绍用户变量的一些技巧。
2.2 使用技巧
也可以用变量和其他字符组成新的字,这时可能需要把变量用{}括起,如:
SAT=Satur
echo
Today is ${SAT}day
输出结果是: Today is Saturday
有时候为了避免变量名和别的字符产生混淆,你最好养成习惯把变量名用{}括起来。
对于未赋值的变量, Shell以空值对待, 用户也可以用unset命令清除给变量赋的值.看一个例子:
复制代码 代码如下:
#!/bin/sh
echo "a=$a" ;
a=2
echo "a=$a" ;
unset a
echo "a=$a" ;
先猜猜结果是什么?
-bash-2.05b$ ./test
.sh
a=
a=2
a=
如果你懂C++,你应该知道有个变量修饰符"const",用于避免程序一不小心对变量进行修改。在shell中,对于用户变量,你可以使用同样的修饰符"readonly", 如果我把上面的例子修改成这样:
复制代码 代码如下:
#!/bin/sh
echo "a=$a" ;
#下面增加了readonly
readonly a=2
echo "a=$a" ;
unset a
echo "a=$a" ;
其结果当然会不一样了:
-bash-2.05b$ ./test
.sh
a=
a=2
a=2
2.3 shell 中的数组
shell变量中还能设置数组,但是不同的shell版本有不同数组赋值方法,而bourne shell 中不支持数组方式。因此,如果不是十分需要,还是建议你不要使用数组。若你的数据结构十分复杂,必须要使用数组,那么我建议你还是选择别的语言吧,shell不是万能的。
shell有两种赋值方式,第一种是直接用下标赋值:
name[0]="Tom"
name[1]="Tomy"
name[2]="John"
...
另一种方式对于不同的shell版本不一样。bash中赋值:
[code]
#!/usr/local/bin/bash
name=("Tom" "Tomy" "John")
for i in 0 1 2
do echo $i:${name[$i]} ;
done
[html]
上面两种赋值方式达到的效果一样。另外,你看见访问数组元素的方法了吗?使用${name[index]}的方式。注意第一行使用的是#!/usr/local/bin/bash, 和以前有些不一样哦。其输出结果是:
-bash-2.05b$ ./test
.sh
0:Tom
1:Tomy
2:John
3 shell 环境变量
shell 环境变量是所有shell 程序都会接受的参数。shell程序运行时,都会接收一组变量,这组变量就是环境变量。常用的环境变量:
名称
描述
PATH
命令搜索路径,以冒号为分隔符.注意与DOS下不同的是, 当前目录不在系统路径里
HOME
用户home目录的路径名,是cd命令的默认参数
COLUMNS
定义了命令编辑模式下可使用命令行的长度
EDITOR
默认的行编辑器
VISUAL
默认的可视编辑器
FCEDIT
命令fc使用的编辑器
HISTFILE
命令历史文件
HISTSIZE
命令历史文件中最多可包含的命令条数
HISTFILESIZE
命令历史文件中包含的最大行数
IFS
定义SHELL使用的分隔符
LOGNAME
用户登录名
MAIL
指向一个需要SHELL监视其修改时间的文件.当该文件修改后, SHELL将发消息You hava mail给用户
MAILCHECK
SHELL检查MAIL文件的周期,单位是秒
MAILPATH
功能与MAIL类似.但可以用一组文件,以冒号分隔,每个文件后可跟一个问号和一条发向用户的消息
SHELL
SHELL的路径名
TERM
终端类型
TMOUT
SHELL自动退出的时间,单位为秒,若设为0则禁止SHELL自动退出
PROMPT_COMMAND
指定在主命令提示符前应执行的命令
PS1
主命令提示符
PS2
二级命令提示符,命令执行过程中要求输入数据时用
PS3
select的命令提示符
PS4
调试命令提示符
MANPATH
寻找手册页的路径,以冒号分隔
LD_LIBRARY_PATH
寻找库的路径,以冒号分隔
这些变量,要关注的最多的就是PATH, 其重要性不要我说了吧?
如果你希望把你定义的变量让其他所有的shell程序都能使用,也就是定义新的环境变量。你只要使用export关键词就可以了。例如:
export
MY_NAME=Winter
export
PATH=/home/winter/bin:$PATH
上面的程序中,第一行输出MY_NAME变量,第二行是在环境变量PATH中增加一个路径/home/winter/bin 。如果你希望这些设置在你登陆unix/linux都有效,你需要把他们加入到你的shell启动脚本中, 如果是使用bash
~/.bash_profile
其他版本你看一眼就知道了,在你的home目录下,以"."开头的文件,一般都会隐藏起来,你需要使用'ls -al'命令来显示。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]