标签:
shell学习笔记
##变量
##普通变量:
eg1:
name=axe
echo $name
ps.等号两遍不能有空格,否则会报错.
eg2:
name="axe prpr"
echo $name
or
name=‘axe prpr‘
echo $name
ps.双引号中可以引用其他变量,单引号不可以。
eg:
name=axe
fullname="$name prpr"
echo $fullname
eg3:
version=`uname -a`(在变量中引用命令)
echo $version
eg4:
变量的扩增:
echo $PATH
PATH=${PATH}:/home/axe
echo $PATH
or
PATH="$PATH":/home/axe
##环境变量:
env查看:
`axe@axe:~$ env
LC_PAPER=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
XDG_SESSION_ID=6
LC_MONETARY=zh_CN.UTF-8
TERM=vt100
……`
or export查看.
eg:
name=axe
echo $name
bash(新建一个子程序)
echo $name(此时没有输出)
exit
export name
bash
echo $name
##取消变量
eg:
name=axe
echo $name
unset name(取消变量)
echo $name
##只读变量
eg:
name=axe
readonly name
name=prpr(此时报错)
##特殊变量
eg.eg:
vi test2.sh
`#!/bin/sh
echo $$ #表示当前shell进程的ID
echo $0 #表示当前的文件名
echo $1 #表示脚本或函数的输入值
echo $# #表示传递给脚本或函数的参数个数
echo $* #表示传递给脚本或函数的所有参数
echo $@ #表示传递给脚本或函数的所有参数
echo $? #表示函数的返回值
#区别下$*和$@
for i in $*
do
echo $i
done
for i in $@
do
echo $i
done
for i in "$*"
do
echo $i
done
for i in "$@"
do
echo $i
done
#不加""时,两个输出一样为"$1","$2"..加""时,$*会以"$1,$2.."输出
#可以看出没什么吊用
`
wq!
chmod +x test2.sh
./test2.sh a b
执行结果为:
`axe@axe:~/test$ ./test2.sh a b
12304
./test2.sh
a
2
a b
a b
0
a
b
a
b
a b
a
b
ps.这里的$?执行结果为0,表示当前shell上一个命令的退出状态为success.
##算术运算
bash不支持简单运算,可以用expr实现:
eg:
vi test3.sh
`#!/bin/sh
value1=`expr 2 + 2`
value2=`expr 2 - 2`
value3=`expr 2 \* 2`
value4=`expr 2 / 2`
echo $value1
echo $value2
echo $value3
echo $value4
`
输出结果为:4 0 4 1
##关系运算
vi test4.sh
`#!/bin/sh
if [ $1 -eq $2 ];then
echo "$1=$2"
fi
if [ $1 -ne $2 ];then
echo "$1!=$2"
fi
if [ $1 -gt $2 ];then
echo "$1>$2"
fi
if [ $1 -lt $2 ];then
echo "$1<$2"
fi
if [ $1 -ge $2 ];then
echo "$1>=$2"
fi
if [ $1 -le $2 ];then
echo "$1<=$2"
fi
`
##布尔运算符
eg:
if [ 1 -eq 2 -o 1 -lt 2 ];then echo true;fi;
if [ 1 -ge 1 -a 1 -le 1 ];then echo true;fi;
if [ ! 1 -eq 2 ];then echo true;fi;
##字符串运算符
eg:
if [ a = a ];then echo true;fi;
if [ a != b ];then echo true;fi;
if [ -z ];then echo true;fi;
if [ -n a ];then echo true;fi;
if [ str ];then echo true;fi;
##文件测试运算符
file="/home/axe/test/test1.sh"
if [ -r $file ];then echo true;fi;
if [ -w $file ];then echo ture;fi;
if [ -x $file ];then echo ture;fi;
if [ -s $file ];then echo ture;fi;(是否为空)
if [ -e $file ];then echo ture;fi;(是否存在)
其余:
`
-b file 检测文件是否是块设备文件,如果是,则返回 true。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。
-d file 检测文件是否是目录,如果是,则返回 true。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件)
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回true。
-p file 检测文件是否是具名管道,如果是,则返回 true。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。
`
##字符串
name="axe prpr"
echo $name
echo ${#name} #表示字符串长度
echo `expr index "$name" a` #表示字符a在$name中的位置
name2="axe prpr $name" #双引号拼接字符串
echo ${name:1:4} 提取字符串
##数组
array=(a b c)
echo ${array[1]}
echo ${array[*]} #或者@
echo ${#array[*]} #获取长度
##条件选择
#if else elif fi
eg:
a=b
if [ -n $a ];then echo true;elfi [ -z $a ];then echo ture;fi;
#case in ;; esac
eg:
#!/bin/sh
case $1 in
axe) echo "$1 is a name"
;;
0904) echo "$1 is a date"
;;
esac
#for in do done
eg:
for file in /home/axe/test/*.sh
do
echo $file
done
#while do done
eg:
while read file;do echo "get $file";echo "type CTRL+D to terminate";done;
#until do done
eg:
a=100;until [ `expr $a - 1` -le 0 ] ;do a=`expr $a - 1`;echo $a;done;(输出100-1)
#break,continue
略
##函数
eg:
function name(){
name=axe
echo $name
}
name
eg2:函数的返回值
function add(){
return `expr 1 + 2`
}
add
echo $?
删除函数使用unset.f
eg3:传参
function calputer(){
case $2 in
+) echo `expr $1 + $3`;;
-) echo `expr $1 - $3`;;
*) echo `expr $1 \* $3`;;
/) echo `expr $1 / $3`;;
esac
}
calputer 1 + 2
##重定向
eg:
echo `pwd` > pwd.sh
ls -l < pwd.sh
##文件包含
略
标签:
原文地址:http://www.cnblogs.com/axeprpr/p/4818132.html