shell 脚本

shell 中基本语法与特殊变量
特殊变量
# :存放命令行参数的个数 $# 用于输出
ps:argc 不为0 至少从1开始 
? :存放最后1条命令的返回码
*或者@ : 存放所有输入的命令行参数;这两个变量在linux中是等价的

特殊字符屏蔽(要将其作为一般字符使用)
"",'',和\ :'' > ""
()有特殊含义,注意它的转义(当成命令解释)

${} 变量的正规表达式
bash 对 ${} 定义了不少用法。以下是取自线上说明的表列
    ${parameter:-word}    ${parameter:=word}    ${parameter:?word}    ${parameter:+word}    ${parameter:offset}    ${parameter:offset:length}    ${!prefix*}    ${#parameter}    ${parameter#word}    ${parameter##word}    ${parameter%word}    ${parameter%%word}    ${parameter/pattern/string}    ${parameter//pattern/string}


String:为空,表达式为真
-n String: 长度为非0 表达式为真
-z String: 长度为0 表达式为真

整数比较,文件属性判定


shift [n] 
参数左移动n位
set [-option][arg...] 
显示变量及其值,设置或者还原shell的属性,设置位置变量的值
不带任何参数显示目前系统中所有的变量名称和变量值
指定选项则可设置或还原你shell的属性
eg:
echo $1 $2 $3
set A B C D E
echo $1 $2 $3 $4 $5 $6 $7


<用法详解???>

关于参数列表 
$?
$#
$0---$9

if (test expression) then  # 还可if []...   ???test 和 []的区别?? 可以 if ! [! ...] []中可以用-o 或者 -a (and)
	commands
else
	commands
fi

case语句中,可以使用匹配模式,就是前面说过的元字符匹配模式,而不是正则表达式的匹配
case string in
	pattern_1) command1;; #pattern 可以为通配符,甚至是[] 命令
	...
	*) commands;;
esac

for loop_index in arg_list   #省略in和arg_list时候,loop_index依次取$1 $2...
do
	commands
done

while (test expression) 或者 while [ expression ]
do
	commands
done

也可以这样 
while echo "Input your choice"
read choice
do
。。。
done
# arg_list 允许使用通配符
( basename )  剥出指定后缀 。basename filename .a (剥离掉.a的后缀)

shell 中的括号{ (和[
1.${var} 
2.$(cmd) 
3.()和{} 
4.${var:-string},${var:+string},${var:=string},${var:?string} 
5.$((exp)) 
6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern)
7.test [] [[]]

1.Shell 中变量的原形 ${var} 
它是Shell中变量的原形eg: echo ${var}abcd ; mv $filename ${filename}.$tail;这是批量改后缀名的句子
2.命令替换 $(cmd)
先执行cmd命令 再将命令后的标准输出放回到原来的位置,边成了 echo 标准输出
3.一串的命令执行() 和 {} 注意空格和分号
5.POSIX标准的扩展计算:$((exp))
eg:echo $((var++))
7. [[ 是 bash 程序语言的关键字
1>在 [[ 中使用 && 和 || ,[ 中使用 -a 和 -o 表示逻辑与和逻辑或
2>test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq, -gt这种形式
3>[ ] 中的长度有一定限制,如[ -z $(cat ./staff_db | grep -w “0000000001”) ]就会提示说[中参数过多,原因在于 staff_db的文件太大么? 写法不对 应该写成[ -z “$(cat ./staff_db | grep -w “0000000001”)” ] 那上面的会解释成什么呢?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值