1.开头
#!/bin/bash //选择编译环境
xxx //正文
2.变量
- 变量定义或者赋值的时候必须是等号两边没有空格
- 使用变量的时候需要带
$
- 需要将带空格的字符串赋值给变量时,要用双引号括起来
- 双引号和单引号。在字符串中使用变量,需要在双引号中
i=1
echo $i #1
echo "$i" #1
echo '$i' #$i
2.1赋值
a=5 #变量定义的时候必须是等号两边没有空格
b=2
c=$((a+b)) #变量赋值 7
d=$a+$b #字符串 5+2
2.2从键盘输入变量值
echo "Please input a filename: "
read filename
echo $filename
2.3系统变量
变量 | 含义 |
---|---|
$0 | 这个程序的执行名字 |
$n | 这个程序的第n个参数值,n=1…9 |
$* | 这个程序的所有参数 |
$# | 这个程序的参数个数 |
$$ | 这个程序的PID |
$! | 执行上一个背景指令的PID |
$? | 上一个指令的返回值 |
2.4双引号及单引号
echo "$HOME $PATH" # 显示变量值
/home/hbwork opt/kde/bin:/usr/local/bin:
echo '$HOME $PATH' #显示单引号里的内容
$HOME $PATH
2.5变量表达式
#!/bin/bash
str="a b c d e f g h i j"
echo "the source string is "${str} #源字符串
echo "the string length is "${#str} #字符串长度
echo "the 6th to last string is "${str:5} #截取从第五个后面开始到最后的字符
echo "the 6th to 8th string is "${str:5:2} #截取从第五个后面开始的2个字符
echo "after delete shortest string of start is "${str#a*f} #从开头删除a到f的字符
echo "after delete widest string of start is "${str##a*} #从开头删除a以后的字符
echo "after delete shortest string of end is "${str%f*j} #从结尾删除f到j的字符
echo "after delete widest string of end is "${str%%*j} #从结尾删除j前面的所有字符包括j
3.判断
- 使用if语句的时候进行判断如果是进行数值类的判断,建议使用let(())进行判断,对于字符串等使用test[ ] or [[ ]] 进行判断
- (())中变量是可以不使用$来引用的
- 使用
[]
要保证每个变量间都要有空格,括号前后也要有空格 - 多个条件判断 && ||
3.1 test或[]
echo "Please input a filename: "
read filename
test -f/-d/-r/-w/-x $filename && echo "the file is xx file"
[ -f/-d/-r/-w/-x $filename ] && echo "the file is xx file"
3.2 if
read grades
if [ $grades -ge 90 ] && [ $grades -le 100 ];then
echo "Your grade is excellent."
elif [ $grades -ge 80 ] && [ $grades -le 89 ];then
echo "Your grade is good."
else
echo "Your grade is badly."
fi
3.3 case
- esac 结束符
- 两个分号
echo "enter a number:"
read num
case $num in
1)
echo "1" ;; #注意,这里是两个分号
[2-9])
echo "$num";;
*)
echo "other: $num";;
esac #结束符
4. 循环
4.1 while
while condition
do
xxx
done
4.2 unitl
until condition
do
xxx
done
4.3 for
for n in `seq 2 8`
do
echo $n
done
4.4 退出循环
- break 立即退出循环
- continue 忽略本循环中的其他命令,继续下一下循环
5. 函数
函数参数从
1到
1
到
n,$0 是文件名
返回值只能是整数,0成功,其他失败
[function] funcName()
{
语句
[return 返回值]
}
6. 文件
6.1 while
while read line # while read -r line
do #do必须在第二行
echo $line
done < filename
循环中执行效率最高,最常用的方法
注释:这种方式在结束的时候需要执行文件,就好像是执行完的时候再把文件读进去一样。
6.2 管道
cat filename | while read line
do #do必须在第二行
echo $line
done
当遇见管道的时候管道左边的命令的输出会作为管道右边命令的输入然后被输入出来。
6.3 for 效率最高
方法一
for line in `cat filename` #注意这个符号不是单引号
do #do必须在第二行
echo ${line}
done
方法二
for line in $(cat filename)
do
echo $line
done
注意1: 转入到linux的文件注意转换文件格式,修改编码格式方法详见:【Shell】Shell脚本编码格式
**注意2:**for逐行读和while逐行读是有区别的: while能保留格式
$ cat t.txt
1111
3333 4444
$ cat t.txt | while read line; do echo ${line}; done
1111
3333 4444
$ for line in `cat t.txt`; do echo ${line}; done
1111
3333
4444
7. mysql
#!/bin/bash
id=1
cmd="select count(*) from tempdb.tb_tmp where id=${id}"
cnt=$(mysql -uroot -p123456 -s -e "${cmd}") #-s一行一行输出,中间有tab分隔 -e执行sql语句
echo $cnt