一 环境变量
#单引号和双引号的共同作用是当字符串中,存在空格等字符的时候,可以加到环境变量中来
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