shell简单教程

 

交互Shell : 是指用户在提示符下输命令的Shell,       自动执行~/.bashrc脚本

登录Shell : 是在输入用户名和密码登录后得到的Shell

PS:

从图形界面的窗口管理器登录之后会显示桌面不会产生登录Shell(也不会执行启动脚本),

在图形界面下打开终端窗口得到的Shell也不是登录Shell。

 

启动bash会自动执行以下脚本:

1 首先执行/etc/profile,系统中每个用户登录时都要执行这个脚本

2 然后依次查找当前用户主目录的~/.bash_profile、~/.bash_login和~/.profile三个文件

PS:

bash规定首先查找以~/.bash_开头的启动脚本,如果没有则执行~/.profile,是为了和sh保持一致。

顺便一提,在退出登录时会执行~/.bash_logout脚本(如果它存在的话)。

 

表 31.2. 测试命令

[ -d DIR ]        如果DIR存在并且是一个目录则为真

[ -f FILE ]        如果FILE存在且是一个普通文件则为真

[ -z STRING ]    如果STRING的长度为零则为真

[ -n STRING ]    如果STRING的长度非零则为真

[ STRING1 = STRING2 ] 如果两个字符串相同则为真

[ STRING1 != STRING2 ] 如果字符串不相同则为真

[ ARG1 OP ARG2 ]    ARG1和ARG2应该是整数或者取值为整数的变量,OP是-eq(等于)-ne(不等于)-lt(小于)-le(小于等于)

                        -gt(大于)-ge(大于等于)之中的一个

 

表 31.3. 带与、或、非的测试命令

[ ! EXPR ]        EXPR可以是上表中的任意一种测试条件,!表示逻辑反

[ EXPR1 -a EXPR2 ] EXPR1和EXPR2可以是上表中的任意一种测试条件,-a表示逻辑与

[ EXPR1 -o EXPR2 ] EXPR1和EXPR2可以是上表中的任意一种测试条件,-o表示逻辑或

 

结构控制if/then/elif/else/fi

 : 是一个特殊的命令,称为空命令,该命令不做任何事,但Exit Status总是真

read命令的作用是等待用户输入一行字符串,将该字符串存到一个Shell变量中

= 在条件判断里表示是否相等的判断

Shell还提供了&&和||语法,和C语言类似,具有Short-circuit特性

 

结构控制case/esac

而Shell脚本的case可以匹配字符串和Wildcard,每个匹配分支可以有若干条命令,末尾必须以;;结束,

执行时找到第一个匹配的分支并执行相应的命令,然后直接跳到esac之后,不需要像C语言一样用break跳出。

 

结构控制for/do/done

for FRUIT in apple banana pear; do

  echo "I like $FRUIT"

done

 

结构控制while/do/done

COUNTER=1

while [ "$COUNTER" -lt 10 ]; do

  echo "Here we go again"

  COUNTER=$(($COUNTER+1))

done

 

表 31.4. 常用的位置参数和特殊变量

$0 相当于C语言main函数的argv[0]

$1、$2... 这些称为位置参数(Positional Parameter),相当于C语言main函数的argv[1]、argv[2]...

$# 相当于C语言main函数的argc - 1,注意这里的#后面不表示注释

$@ 表示参数列表"$1" "$2" ...,例如可以用在for循环中的in后面。

$? 上一条命令的Exit Status

$$ 当前Shell的进程号

 

@@@@@@@@

位置参数可以用shift命令左移。

比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。

不带参数的shift命令相当于shift 1

@@@@@@@@

 

注意函数体的左花括号{和后面的命令之间必须有空格或换行,

如果将最后一条命令和右花括号}写在同一行,命令末尾必须有;号。

用foo函数的时候才执行函数体中的命令。

注意Shell中的函数调用不写括号.

Shell脚本中的函数必须先定义后调用,

调用函数时可以传任意个参数,在函数内同样是用$0、$1、$2等变量来提取参数,函数中的位置参数相当于函数的局部变量,

改变这些变量并不会影响函数外面的$0、$1、$2等变量。函数中可以用return命令返回,如果return后面跟一个数字则表示函数的Exit Status。

 

Shell提供了一些用于调试脚本的选项,如下所示:

-n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误

-v 一边执行脚本,一边将执行过的脚本命令打印到标准错误输出

-x 提供跟踪执行信息,将执行的每一条命令和结果依次打印出来

 

在命令行提供参数

$ sh -x ./script.sh

二是在脚本开头提供参数

#! /bin/sh -x

第三种方法是在脚本中用set命令启用或禁用参数

#! /bin/sh

if [ -z "$1" ]; then

  set -x

  echo "ERROR: Insufficient Args."

  exit 1

  set +x

fi

set -x和set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试

 

%%%%%%%%%%% 正则表达式 %%%%%%%%%%%%

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值