给变量赋值例子:
#!/bin/bash
#shell test
a=12
b=abc
c=12.3
d='abc efg' #单引号
f=abc efg #赋值错误
说明:每个shell 脚本第一行都是以 #! 开头,加上执行此shell程序 的shell 解释器的完整路径
# 是shell 代码的注释符号
算术运算赋值例子:
#!/bin/bash
#shell test
a=[1+2] #1+2
let b=1+2 #3
c=`expr 1 + 2` #3
e=$[1+2] #3
echo $a
echo $b
echo $c
echo $[1+2]
说明:shell 中变量赋值不需要事先声明变量
查看环境变量:export
环境变量可直接使用如 echo $SSH_ASKPASS
位置变量:执行shell 脚本时传入的参数,分别有 1~9个,可以这么用:echo $1
输出:
echo $str #结果将输出到终端
echo $str>file #结果输出到文件file,没有会新建,有会覆盖
echo $str>>file #结果输出会追加到文件file 尾部。
注意:
1)如果在一个脚本中多个> 输出到文件,那么后面的将会覆盖掉前面的
比如
echo 'a'<file
echo 'b'<file
echo 'c'<file
最后file 文件中只会保存‘c'字符!
2)使用 \t 和 \n 和 \c,需要添加 -e
echo -e "hello \n $str"
几个特殊的符号:
单引号’ ,位于单引号中的特殊字符会失去其特殊意义,解释器会视他为普通字符串。如 echo 'hello $str' 会直接输出 hello $str
双引号“,位于双引号内的特殊字符会保持其特殊意义。如 echo "hello $str" 会输出 hello 加上 str 的值(当然前提是str 是一个变量);位于双引号内到单引号会被当作普通字符
转义字符\,转义字符即斜杠,会使特殊字符失去特殊意义。如 echo ”hello \$str“ 会输出 hello $str
反引号:(即tab 键上面那个 ` )用于执行系统命令
执行:echo `date`
会输出:2014年 03月 02日 星期日 18:00:30 CST
执行:a=`ls`
输入:
1)
执行:read a #输入:abc
a 的值为:abc
2)
执行:read a #输入:abc fgh ijk
a 的值为:abc fgh ijk
3)
执行:read a b c #输入:abc fgh ijk
# a、b、c 的值分别为 abc 、 fgh 、 ijk
4)
执行:read a b #输入:abc fgh ijk
#a、b 的值分别为:abc 、 fgh ijk 说明多输入的值会连同空格赋给最后一个变量
测试语句:test语句,测试成功返回 0,失败返回 1
1)文件状态测试
-w:测试文件是否可写 | -r:测试文件是否可读 | -x:测试文件是否可执行 |
-L(大写!):测试文件是否为链接文件 | -d:测试文件是否为目录文件 | -f:测试文件是否为正规文件 |
-s:测试文件是否非空(空则返回 0) | -u:测试文件是否有 suid 位设置 |
执行:test -s file.txt #file.txt 文件为空
echo $? # $? 用来保存上一条命令到返回值,可以直接用,没关系的,真的
会输出:0
执行:test -w file.txt #假设 file.txt 文件不可写
echo $?
会输出:1
2)数值测试
-eq:两个数是否相等 | -ne:两个数是否不相等 |
-le:相当与小于等于号 | -ge:相当与大于等于号 |
-gt:相当与大于号 | -lt:相当与小于号 |
如:
test 10 -lt 12 #返回值为0
test 可用方括号代替:
cp ./txb/file ./
if [ $? -eq 0 ] ;then #方括号左右都有空格!
echo "copy finished"
else echo "copy errored"
fi
3)字符串测试
=:测试两个字符串是否相等 |
!=:测试两个字符串是否不等 |
-z:测试单个字符串是否为空 |
-n:测试单个字符串是否非空 |
具体代码不再演罗嗦
4)逻辑测试
-a:逻辑与,你懂的(and) |
-o:逻辑或 |
!:逻辑否 |
if [ -w a.txt -a -x a.txt ]
循环语句:for、while、until
1)for 循环:遍历列表到循环
for ch in a s e d u # in 是关键词
do
echo $ch # 会逐个打印 a s e d u
done
2)while 循环:条件为真则循环执行 do - done循环体
while[ $a -ne 0 ]
do
echo"$1"
shift
done
2)until 循环:于while 循环刚好相反,条件为假则执行循环体,其他与 while 循环一样