Shell-基础知识

1. shell文件第一行#! /bin/sh的作用

用来表示此shell脚本由什么程序去执行;若是/bin/sh,则使用bash去执行脚本;也可以是/bin/rm/bin/more/bin/cat等等;都会达到这些命令的作用;删除脚本、读出脚本内容等。

2. Shell脚本执行流程

  1. 当执行脚本时,会fork一条和父Shell一模一样的子shell;因此,在子shell中的操作不会影响到父Shell的环境。
  2. 可以使用source xx.sh; 这样不会创建子shell,会直接使用父shell的环境。

3. export

export是修改当前shell进程中的环境变量;对于父shell不会产生影响。有效期:维持到当前Shell结束的时候,并不会持久化
若要export的环境变量持久化,可以设置在持久化文件中

启动文件描述
/etc/profile系统范围的默认值,大部分用来设置环境(所有由sh衍生出来的shell都适用)
/etc/bashrc特定的Bash的,系统范围函数与别名
$HOME/.bash_profile用户定义的,环境默认设置,在每个用户的home目录下都可以找到
$HOME/.bashrc用户定义的Bash初始化文件,可以在每个用户的home目录下找到(本地副本保存在/etc/bashrc);只有交互式的shell和用户脚本才会读取这个文件;
$HOME/.bash_logout登出文件、用户定义的指令文件,可以在每个用户的home目录下找到;在登出shell的时候,这个文件中的命令就会得到执行。

4. Shell通配符

通配符描述
*匹配0或者多个字符
?匹配任意单个字符(不含0个字符)
[list]匹配[list]中任意单个字符
[!list]匹配除list中的任意单个字符

5. Shell引号

引号描述
" "会把引号的内容当做整体来看待,允许通过$符号引用其他的变量值
’ ’会把引号的内容当做整体来看待,所有的特殊字符都会当做普通字符看待;禁止引用其它变量值
反撇号(``)$()一样,引号和括号里面的命令优先执行,如果存在嵌套使用,反撇号不能使用。需要使用$();

6. Shell常用参数引用

引用参数描述
0, 1, 2位置参数。 传入shell脚本的参数;参数0为shell脚本的名称
*以一个单字符串显示所有向脚本传递的参数,与位置变量不同,此选项可超过9个
@从参数1开始,显示所有向脚本传递的参数。可以通过$1、$2分别获取参数1,2的值。
#参数数量(不包含参数0)
$脚本运行的当前进程ID号
!后台运行的最后一个进程ID号
?显示最后命令的退出状态,0表示没有错误,其它值表示有错误
-显示shell使用的当前选项,与set命令功能相同

7. Expr

  1. 判断变量是否为数字;原理:当expr 非整数的变量 + 整数时,会报错。通过$?获取返回值。
	1. expr $a + 1 &>/dev/null   # 忽略expr的结果
	2. echo $? # 根据上一句的返回值,判断是否为0,为0即成功,非0即发生错误,认定此变量为非整数。
  1. expr 参数1 操作符 参数2: 参数和操作符之间需要空格分开,不然,会被当成字符串处理。
8.小技术点
  1. 求字符串长度
	1. ${#my_str}
	2. expr length "${my_str}"
	3. echo $my_str |wc -L
	4. echo $my_str |awk '{print length}'
  1. 使用bash命令,调试shell脚本
	1. bash -n wc.sh # 校验脚本语法是否正确:
	2. bash -v wc.sh #打印一行脚本,执行一行脚本。发现错误,也会打印错误。
	3. bash -x wc.sh #打印一行脚本,执行一行脚本。
9. 小案列
  1. N乘法表:根据输入的数字,得到对应的乘法表。
#! /bin/sh 

# function: 9 * 9 multiple table.

expr $1 + 1 &>/dev/null

params_result=$?
if [ $params_result -ne 0 ]; then
 echo "$1 isn't number."
 exit 1
fi

declare -i max=$1
declare -i outer=1
while [ $outer -le $max ]
do
    declare -i inner=1
    while [ $inner -le $outer ]
    do
        printf "%d * %d = $((inner * outer))\t " $outer $inner
        inner=$inner+1
    done
    printf "\n"
    outer=$outer+1
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值