Shell 笔记

来源:互联网 发布:恶棍天使知乎 编辑:程序博客网 时间:2024/06/06 11:14


变量赋值
变量名=值
注:等号两边不能有空格,如字符串中有空格需用引号括起。

引用变量
$变量名 或 ${变量名}

内部变量
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
$$ 脚本运行的当前进程I D号
$! 后台运行的最后一个进程的进程I D号
$@ 使用时加引号,并在引号中返回每个参数
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

环境变量
$LOGNAME 用户的登录名
$HOME 用户自己的主目录
$SHELL SHELL路径
$PATH 命令执行时的目录
$MAIL 保存邮箱路径名
$MAILCHECK 检查新邮件的时间
$PS1 shell命令行的提示符
$PS2 命令未打完时,再输入的提示符
$MANPATH man指令的搜索路径

设置环境变量,变量名=值;export 变量名
清除环境变量,unset 变量名
显示所有环境变量,env

数组
数组名[下标]=值
数组名=(值1 值2 ……)
如:week=(a b c)
week[3]=d
echo ${week[0]}
echo ${week[*]}

控制流结构

条件测试
test condition 或 [ condition]
test命令用于测试字符串,文件状态和数字,使用最后退出状态命令$?可测知test,以0表示正确,1表示错误
例子:
test –f “m1.c” 或 [ –f “m1.c” ] #使用方括号时,要注意在条件两边加上空格。
echo $?

文件状态测试
-d 目录
-s 文件长度大于0、非空
-f 正规文件
-w 可写
-r 可读
-x 可执行

测试时使用逻辑操作符
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。
例子:[ -f “m1.c” -o -d “mydir” ]
echo $?

字符串测试
= 两个字符串相等。
!= 两个字符串不等。
-z 空串。
-n 非空串。

测试数值
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。

if语句
if 条件
then 命令
elif 条件2
then 命令
else 命令
fi
举例:
#!/bin/bash
if [ -d "$1" ] #test –f “$1”
then cd "$1"
else mkdir "$1";cd "$1"
fi
条件测试还可以利用一般的命令执行成功与否做判断。

case语句
case 值 in
模式1 | 模式) 命令1 # 多个模式 可用 | 隔开
... #这里可有多条命令, 但最后一条必须以;;结尾
;;
模式2) 命令2
...
;;
esac
例子
case $response in
1) cat $filename;;
2) rm $filename;;
3) echo "bye-bye!";;
esac

while循环语句
while 命令 或 测试条件 #可多个命令
do
命令表
done

for循环语句
for 变量名 in 列表 #in列表用法是可选的,如果不用它, for循环使用命令行的位置参数。
do
命令表
done

HOSTS=”SEVER1 SEVER2 SEVER3 ”
for loop in $HOSTS
do
ping –c 2 $loop
done

until循环语句
until 条件 或 命令
do
命令表
done

until [ $2=”” ]
do
cp $1 $2
shift 2
done
if [ $1!=”” ]
then echo “bad argument!”
fi

使用break和continue控制循环

select语句
select identifier [ in word ] #select x in query a b c
do
命令表
done

函数
函数名()
{
命令表 #$1 参数
return 0
}
函数名 参数 #执行函数
引用函数文件: . /path/funcfilename
#Other

引号
双引号会解析字符$、`、\
单引号会忽略任何引用值。
反引号用于设置系统命令的输出到变量。
(命令替换)
cmd=`ls` #等号两边无空格
echo $cmd

输入输出重定向
即时文件定向符<<
cmd <<HELLO
some string
HELLO

位置参数
每个访问参数前要加$符号。
第一个参数为$0,表示预留保存实际脚本名字。
$1, ${10}
set命令为位置参数赋值
set m1.c m2.c
则$1为m1.c,$2为m2.c。
移动位置参数shift
格式:shift [n] #n向左移动步数
每执行一次shift命令就将命令行上的实参向左移一位, shift命令不能将$0移走。
getopts

输出命令echo
$>help echo #查看全部参数
输入命令read
格式:read 变量1 变量2

算术运算
格式:((算术表达式))
如:((j=6*3+2))
echo $((4**3))
相对C, 除++ 、--和逗号之外, 所有运算符都得到支持。

expr用法
expr命令一般用于整数值,但也可用于字符串。
一般格式为:
expr argument operator argument

eval
CAT_PAS=”cat /etc/passwd | more”
半天也不给我答半天也不给我答eval chmod 777 ~$1
eval $ CAT_PAS

exit命令
exit n

&& 和 ||
cmd && cmd
cmd || cmd

别名
alias cmd=’ls’
unalias cmd

通配符
* ? [ ] [!]
ls –l dwg??[!0-9]*
列出了所有以dwg开头、中间可以是任何两个字符,后面跟随一个非数字字符、然后是任意字符串的文件名。 #这里和正则表达式有所区别
原创粉丝点击