shell基本语法
2010-04-02 09:36
288 查看
1、变量
定义一个变量:varname=value,等号两边不能有空格,否则会被解释成命令。
变量分为本地变量和环境变量。本地变量只存在于当前的shell进程,而环境变量
可以从当前进程传递给fork出来的子进程。printenv可以打印出当前进程的环境变量。
用export可以将本地变量导出成环境变量。用unset可以删除变量。
2、命令代换
可以用`和$()进行命令代换。如:
birth=`date`或birth=$(date)
3、算术代换$(())
var=45
echo $(($var+3))
4、转义字符/
这个/没什么好说的,各种语言都有,不过在shell里有个特殊的地方。
其中“-”加上转义字符也不行,如果要创建一个-hell的文件,你需要这么做
touch ./-hello
5、交互登录的shell
就是输入用户名和密码后得到的shell。
进入登录shell后会执行一系列文件:
/etc/profile、~/.bash_profile、~/.bash_login、~/.profile
在退出时候要执行~/.bash_logout
6、交互非登录的shell
在图形界面打开一个终端或者在登陆shell中执行bash命令,就得到一个交互非登录的shell。
这种shell在启动时自动执行~/.bashrc。
一般在bashrc里面设置本地变量、函数、alias。
7、非交互启动的shell
为执行脚本而fork出来的是非交互shell。
它会执行
BASH_ENV这个环境变量指定的文件。
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
8、条件测试
可以用test或[进行条件测试,如果测试结果为真就返回0,如果为假就返回1。
测试两个数的大小:
[是一个命令,传递给它的参数都用空格分开。
常见的测试命令如下:
[ -d dir ] :如果dir存在,返回真
[ -f filename ] :如果filename这个文件存在,就返回真
[ -z string ] :如果string为空返回真
[ -n string ] :如果string不为空返回真
[ string1 = string2 ] :如果相等返回真
[ string1 != string2 ] :如果不相等返回真
[ arg1 OP arg2 ] :OP可以是-gt/-lt/-ge/-le/-eq/-ne中的任意一个。
其他语言常用的!、and、or在shell里面这么表示:
[ ! exp ]
[ exp1 -a exp2 ]
[ exp1 -o exp2 ]
举个例子:
[ -d test -a “$var”="abc" ]
其中$var一般要用引号引起来,否则容易引起错误。原因是,如果var为空的话,这句会被
解释成这样:[ -d test -a ="abc" ],这显然有语法错误,但是加上引号就会被解释成这样:
[ -d test -a ""="abc" ]这样无论如何都不会有语法错误了。
9、if语句
if语句常常包含以下关键词:
if、then、
else、elif、fi。
if [ -f ~/.bashrc ]是一条,then . ~/.bashrc、fi各是一条。如果两条写在一块,就要用“;”分割。
:是一个空命令,表示什么也不执行。
10、case语句
11、for/do/done
12、while/do/done
13、位置参数和特殊变量
$0:文件名
$#:参数个数
$@:参数列表,不包括$0
$?:上一次命令执行是否成功的标志
$$:进程id
14、函数
调用函数时可以传递任意个参数,在函数内提取参数用$0/$1....
下面这个脚本可以一次创建多个目录,各目录名通过命令行参数传入,脚本逐个测试各目录是否存在,如果目录不存在,首先打印信息然后试着创建该目录。
15、脚本的调试
sh -x ./test.sh:这样可以将执行的每一条命令和结果打印出来。
定义一个变量:varname=value,等号两边不能有空格,否则会被解释成命令。
变量分为本地变量和环境变量。本地变量只存在于当前的shell进程,而环境变量
可以从当前进程传递给fork出来的子进程。printenv可以打印出当前进程的环境变量。
用export可以将本地变量导出成环境变量。用unset可以删除变量。
2、命令代换
可以用`和$()进行命令代换。如:
birth=`date`或birth=$(date)
3、算术代换$(())
var=45
echo $(($var+3))
4、转义字符/
这个/没什么好说的,各种语言都有,不过在shell里有个特殊的地方。
其中“-”加上转义字符也不行,如果要创建一个-hell的文件,你需要这么做
touch ./-hello
5、交互登录的shell
就是输入用户名和密码后得到的shell。
进入登录shell后会执行一系列文件:
/etc/profile、~/.bash_profile、~/.bash_login、~/.profile
在退出时候要执行~/.bash_logout
6、交互非登录的shell
在图形界面打开一个终端或者在登陆shell中执行bash命令,就得到一个交互非登录的shell。
这种shell在启动时自动执行~/.bashrc。
一般在bashrc里面设置本地变量、函数、alias。
7、非交互启动的shell
为执行脚本而fork出来的是非交互shell。
它会执行
BASH_ENV这个环境变量指定的文件。
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
8、条件测试
可以用test或[进行条件测试,如果测试结果为真就返回0,如果为假就返回1。
测试两个数的大小:
$ VAR=2 $ test $VAR -gt 1 $ echo $? 0 $ test $VAR -gt 3 $ echo $? 1 $ [ $VAR -gt 3 ] $ echo $? 1
[是一个命令,传递给它的参数都用空格分开。
常见的测试命令如下:
[ -d dir ] :如果dir存在,返回真
[ -f filename ] :如果filename这个文件存在,就返回真
[ -z string ] :如果string为空返回真
[ -n string ] :如果string不为空返回真
[ string1 = string2 ] :如果相等返回真
[ string1 != string2 ] :如果不相等返回真
[ arg1 OP arg2 ] :OP可以是-gt/-lt/-ge/-le/-eq/-ne中的任意一个。
其他语言常用的!、and、or在shell里面这么表示:
[ ! exp ]
[ exp1 -a exp2 ]
[ exp1 -o exp2 ]
举个例子:
[ -d test -a “$var”="abc" ]
其中$var一般要用引号引起来,否则容易引起错误。原因是,如果var为空的话,这句会被
解释成这样:[ -d test -a ="abc" ],这显然有语法错误,但是加上引号就会被解释成这样:
[ -d test -a ""="abc" ]这样无论如何都不会有语法错误了。
9、if语句
if语句常常包含以下关键词:
if、then、
else、elif、fi。
if [ -f ~/.bashrc ]; then . ~/.bashrc fi if :; then echo "always true"; fi
if [ -f ~/.bashrc ]是一条,then . ~/.bashrc、fi各是一条。如果两条写在一块,就要用“;”分割。
:是一个空命令,表示什么也不执行。
10、case语句
#! /bin/sh echo "Is it morning? Please answer yes or no." read YES_OR_NO case "$YES_OR_NO" in yes|y|Yes|YES) echo "Good Morning!";; [nN]*) echo "Good Afternoon!";; *) echo "Sorry, $YES_OR_NO not recognized. Enter yes or no." exit 1;; esac exit 0
11、for/do/done
#! /bin/sh for FRUIT in apple banana pear; do echo "I like $FRUIT" done
12、while/do/done
#! /bin/sh echo "Enter password:" read TRY while [ "$TRY" != "secret" ]; do echo "Sorry, try again" read TRY done
13、位置参数和特殊变量
$0:文件名
$#:参数个数
$@:参数列表,不包括$0
$?:上一次命令执行是否成功的标志
$$:进程id
14、函数
调用函数时可以传递任意个参数,在函数内提取参数用$0/$1....
下面这个脚本可以一次创建多个目录,各目录名通过命令行参数传入,脚本逐个测试各目录是否存在,如果目录不存在,首先打印信息然后试着创建该目录。
#! /bin/sh is_directory() { DIR_NAME=$1 if [ ! -d $DIR_NAME ]; then return 1 else return 0 fi } for DIR in "$@"; do if is_directory "$DIR" then : else echo "$DIR doesn't exist. Creating it now..." mkdir $DIR > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "Cannot create directory $DIR" exit 1 fi fi done
15、脚本的调试
sh -x ./test.sh:这样可以将执行的每一条命令和结果打印出来。
相关文章推荐
- Shell 基本语法
- Linux终端介绍、Shell提示符、Bash基本语法
- shell基本语法及实现彩色进度条
- Shell 基本语法
- Linux系统编程(13)——Shell的基本语法
- Shell 基本语法
- mongoDB学习笔记--shell基本语法(二)
- Shell 基本语法
- shell的基本语法
- linux shell编程五步拳(张迅雷闪击shell系列) 第一集 shell基本语法快速入门
- shell基本语法
- linux之shell编程基本语法
- Shell第三篇:基本语法
- shell脚本基本语法详解
- Shell 使用 - 变量及基本语法
- Shell 学习笔记一(基本语法)
- Shell学习笔记二(基本语法)
- Shell 基本语法
- SHELL基本语法2
- Shell 基本语法