linux shell脚本基础

一 环境变量
#单引号和双引号的共同作用是当字符串中,存在空格等字符的时候,可以加到环境变量中来
1)单引号:禁用 变量(和历史)扩展
2)双引号:内部引用了其他环境变量,所以一般为了让带空格的变量是一个整体,我们会使用
echo "$my"
这种方式打印环境变量

设置环境变量,
export myname='piao hailin!'

#打印
echo ${myname} # 推荐,更精确
echo $myname

#卸载
unset myname


二 截断字符串
basename 参数 #找到结束的文件或目录
dirname 参数 #与basename相反,得到他"前面"的部分


三 命令替换
创建一个包含可执行命令结果的环境变量
使用命令替换可以将任何命令或命令管道放在 ` ` 或 $( ) 之间


四 字符穿截取
export mystring='foaafoddfobbfoccfoddfoee.tar.gz'
# 从最后一个fo开始截取
echo ${mystring##*fo}
ee.tar.gz
# 从第一个fo开始截取
echo ${mystring#*fo}
aafoddfobbfoccfoddfoee.tar.gz

# 从后往前,第一个匹配的
echo ${mystring%.*}
foaafoddfobbfoccfoddfoee.tar
# 从后往前,最后一个匹配
echo ${mystring%%.*}
foaafoddfobbfoccfoddfoee

# 按照索引截取
echo ${mystring:0:1}
f


五 接收自变量
第0个表示命令名称
$# 表示变量的个数
$@ 一次引用所有命令行自变量
例:
$0
$1
...
$15
$#

六 shell算术
使用 shell 结构来执行简单的整数运算。只需将特定的算术表达式用 "$((" 和 "))" 括起.
$ echo $(( 100 / 3 ))
33
$ myvar="56"
$ echo $(( $myvar + 12 ))
68
$ echo $(( $myvar - $myvar ))
0 $ myvar=$(( $myvar + 1 ))
$ echo $myvar
57

七 函数
可以将函数(如上面的函数)
放在 ~/.bashrc 或
~/.bash_profile 中,
以便在 bash 中随时使用它们。
.bash_profile修改后要重启

八 名称空间
变量前加local关键字
这样在方法外部,变量就会失效
否则默认的变量是全局的

九 相关操作
运算符  描述  示例 
文件比较运算符 
-e filename  如果 filename存在,则为真  [ -e /var/log/syslog ]
-d filename  如果 filename为目录,则为真  [ -d /tmp/mydir ]
-f filename  如果 filename为常规文件,则为真  [ -f /usr/bin/grep ]
-L filename  如果 filename为符号链接,则为真  [ -L /usr/bin/grep ]
-r filename  如果 filename可读,则为真  [ -r /var/log/syslog ]
-w filename  如果 filename可写,则为真  [ -w /var/mytmp.txt ]
-x filename  如果 filename可执行,则为真  [ -L /usr/bin/grep ]
filename1-nt filename2  如果 filename1比 filename2新,则为真  [ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2  如果 filename1比 filename2旧,则为真  [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法) 
-z string  如果 string长度为零,则为真  [ -z "$myvar" ]
-n string  如果 string长度非零,则为真  [ -n "$myvar" ]
string1= string2  如果 string1与 string2相同,则为真  [ "$myvar" = "one two three" ]
string1!= string2  如果 string1与 string2不同,则为真  [ "$myvar" != "one two three" ]
算术比较运算符 
num1-eq num2  等于 [ 3 -eq $mynum ]
num1-ne num2  不等于 [ 3 -ne $mynum ]
num1-lt num2  小于 [ 3 -lt $mynum ]
num1-le num2  小于或等于 [ 3 -le $mynum ]
num1-gt num2  大于 [ 3 -gt $mynum ]
num1-ge num2  大于或等于 [ 3 -ge $mynum ]

#!/usr/bin/env bash
# source命令从文件中读入 bash 语句,然后执行它们
source config.properties
export myname='this my first linux shell!'
export i='100'

echo $title

java -version

echo ${JAVA_HOME}

helloshell(){
	# 局部变量
	local version="1.0"
	# 全局变量
	name="phl"
	echo "hello shell!"
}

helloshell 

echo $version
echo $name

echo ${myname}


# 这个语句的格式很严谨 if空格[空格a空格=空格b空格]
if [ "$1" = "h" ]
then
	echo this is piao hailin.
	echo the first parameter is $1
	echo $((1000/3))
	echo "这是一个特殊的参数,第0号索引:$0"
	echo '参数的个数是:'$#
	#m是循环控制变量
	for m in $@
	do
		echo  "$m"
	done
elif [ "$2" = "p" ]
then
	echo 'exit the shell.'
	exit
else
	echo this is not piao.
fi

echo 'while'
myvar=0
while [ $myvar -ne 3 ]
do
	echo $myvar
	myvar=$(( $myvar + 1 ))
done

echo 'until'
myvar=0
until [ $myvar -eq 3 ]
do
	echo $myvar
	myvar=$(( $myvar + 1 ))
done
 
case "${1}" in
	gz)
		echo 'this is a gz.'
		;;
	tar)
		echo 'this is a tar.'
		;;
	*)
		echo "this is an other."
		exit
		;;
esac      

猜你喜欢

转载自phl.iteye.com/blog/857281