variable 是变量名
$variable 是变量值 ${variable}
unset 变量名 清除变量的值
variable ? value / variable : ?value 对未赋值的 variable,显示系统错误信息
variable:= value 对未赋值的 variable,把value 值赋给它
variable :-value 对未赋值的 variable,把value 值赋给它,但不保存在其空间地址上
只读变量,不能改值
variable =value
readonly variable
妈的,变量赋值与之相关的,居然不让给有空格,真扯蛋
变量默认是字符型的,所以如果要进行四则运行,
则如下:
a=number;
let "a+=10"
echo $a
declare -i 变量名
把变量转为整形,其实当进行四则运算时,才会实现真正的转换
declare -r 变量名
把变量设置为只读
变量是无类型的,是弱类型的,所以如果没有定义或为空的变量,默认为字符0/数字0
列出所有的全局变量
env
声明一个为全局变量
APPSPATH=/usr/local #声明一个变量
export APPSPATH # 声明为全局变量
echo $APPSPATH
清除环境变量
unset APPSPATH
其中
PATH全局变量是记录了可执行的文件路径,每个路径是用冒号分开,如果要添加新的路径,可以用
export PATH = "/新目录名":$PATH
参数:
($0表示脚本名,)
$1....n 表示第几个参数
$*/$@:表示所有的参数
$#表示参数的总数
$?表示是否有错误,无时则返回0,
bash.sh内容如下:
#!bash.sh
echo "the script name is $0"
echo "the first paramter is $1"
echo "the total paramters is $#"
echo "the paramters are $@"
echo "the paramters are $*"
单引号,双引号
单引号不解释变量,并且不会输出格式化的,如PHP中的源代码与浏览器的一样,双引号会解释其中的变量,并连格式化也一并输出
变量在命令替换上有三种情况可以使用:
$var/$(var)/`var` 其中`var`不格式化 $var 格式化
as:
for file $(ls)
do
echo $file
done
-----------------
for file `ls`
do
echo $file
done
----------------
其中的 ls 为查看文件的列表
退出,查看是否上一步的操作是否有错误 echo $? 如果没有错误,则为 0
num1=100
num2=99
$num1 -eq $num2 :如果相等,则 echo $? 为0
$num1 -ge $num2 : 如果num1 >= num2,则echo $? 为0
$num1 -gt $num2; 如果是 num1 > num2,则 echo $? 为0
$num1 -le $num2, $num1 -lt $num2, $num1 -neq $num2 类似
以上只适用于整数来说的,对于浮点数不行,有专门的函数可用
以上还可以用 [ "$num1" -eq "$num2" ]来代替 test $num1 -eq
$num2,方括号之间必须要有空格分格
字符测试
string:测试字符串 string 是否不为空,此字符不能用 [ "$string" ]
-n string:测试字符串string是否不为空
-z string:测试字符串 string是否为空
string1=string2:测试两字符是否相等
string1!=string2:测试两字符是否不相等
测试文件
test -d file 测试file 是否目录
test -e file 测试file 是否存在
test -f file 测试 file 是否为文件
test -r file 测试file 是否是进程可读文件
test -s file 测试file 的长度是否不为0
test -w file 测试file 是否是进程可写文件
test -x file 测试file 是否是进行可执行文件
test -L file 测试file 是否符号化链接
逻辑运算
! expression 为非
-a expression 为 and
-o expression 为or
条件判断
if express
then string
fi
或者
if express;then string
fi
可以嵌套
if expression
then
if express
then
else
....
fi
else
...
fi
或者:
if express
then
...
elif expression
then
....
elif expression
then
...
else
...
fi
case 语法
case "$var" in
value1)
....;;
value2)
...;;
..........
*)
........
esac
as:
#!/bin/bash
echo "input a number"
read ok
case "$ok" in
1)
echo "1";;
2)
echo "2";;
*)
echo "0000"
esac
exit status 可自定义,在文档中用 echo $?可测试其中的输出值
for 循环有三种结构
1。列表for 循环结构
2.不带for 列表循环
3.类C风格的for 循环
1.as:
#!/bin/bash
for var1 in 1 2 3 4
do
echo "$var1"
done
会输出 1 2 3 4
======================
for var2 in {1..6}
do
echo $var2
done
会输出 1 2 3 4 5 6
-----------------
for var3 in {1..6..2} # 步长为2
do
echo $var3
done
会输出 1 3 5
------------------
sum=0
for var4 in {1..100}
do
let "sum+=$var4"
done
累加1到100
============
for file in $( ls )
do
echo $file
done
会输出文件列表
============
echo "input the argument:$#"
for arg in "$*"
do
echo "$arg"
done
运行如下:
./bash.sh a b c
其中 a b c 为其中的参数
=================
2.不带列表的 for
其实与上面的一个样子的
as:
#!/bin/bash
echo "input the number:"
echo "it is : "
for arg
do
echo $arg
done
==========
3.类C风格
for ((expre1; expre2; expre3))
do
...
done
as:
for((var1=1; var1 <= 5; var1++))
do
echo $var1
done
-------------
while 循环
while(( express ))
do
...
done
as:
abc=1
#可以写成 while [[ $abc<=5 ]] 最左边的方括号与while要有间隔,中间的左右方括号也得与条件语句有间隔
while(( abc<=5))
do
echo $abc
let "abc++"
done
==========
until
as:
until [[ express ]]
do
.....
done
-----------
as :
i=0
until [[ "$i" < 5 ]]
do
echo $i
let "i++"
done
===========
嵌套
for((var1=1;var1 <= 9; var1++))
do
for((var2=1; var2 <= 9; var2++))
do
let "temp=var1*var2"
echo -n "$var1*$var2 = $temp "
done
done
==========
可以加入 break/continue
as
while [[ $var > 10 ]]
do
if [ $var -eq 5]
then
break/continue
fi
done
-----------
select结构
as:
select variable in {ls}
do
....
done
as:
select color in "red" "blue" "yellow"
do
break
done
echo "this color is $color"
===========
也可以不带参数的:
select color
do
break
done
echo "the color is $color"
as:
./bash.sh a b c
==================