[笔记]linux shell基础编程笔记
使用的环境是
fedora 18
由于是初学者有错误无法及时发现,欢迎指正.
内容很简单
就是基本的变量的使用 基本的语句和函数的基本创建使用
2013/09/15
shell-->命令解析器 将用户输入的指令转换成相应的机器能够运行的程序
shell脚本
shell的第一行是(不过在fedora下测试..不加也没关系)
#!/bin/sh
#! 指定脚本文件的解析程序
增加运行
chmod +x filename [cc@localhost shell_dir]$ ls /bin/sh -l lrwxrwxrwx. 1 root root 4 1月 10 2013 /bin/sh -> bash
以#表示注释
变量:
不需要声明
a="hello world" #输出a echo "A is:" echo $a
赋值不要$号 但要引用的时候需要加$
在字符串中使用时用{}括起来
echo "this is the ${a}nd"
默认变量:
- $#:传入脚本的命令行参数个数
- $*:传入的所有参数 中间用空格相隔
- $1:第一个命令行参数
- $2:第二个命令行参数
2013/09/16
局部变量:
在shell中 变量首次被赋值时加上local关键字可以声明一个局部变量
hello="var1" echo $hello function func1(){ #与全局冲突时使用local(不过最好都写吧 避免混淆) local hello="var2" echo $hello } func1 echo $hello
输出:
var1
var2
var1
变量赋值:
=(赋值号)左右两边不能有空格
BASH语句不需要分号
If语句:
if [ expression ]
then
#code block
fi
if [ expression ]
then
#code block
else
#code block
fi
a=1 b=1 if [ $a = $b ] #注意在[]和=留空 then echo "${a}=${b}" fi
以下都要在其左右留空格
比较操作 整数 字符串
相同 -eq =
不同 -ne !=
大于 -gt >
小于 -lt <
大于等于 -ge
小于等于 -le
为空 -Z
不为空 -n
-e 判断文件是否存在
-f 文件是普通文件
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可以读取
-w 文件对当前用户可以写入
-x 文件对当前用户可以执行
用[ ]表示判断
例子:
folder=/cc [ -r "${folder}" ] && echo "${folder} 可读" #&&表示前面是真的就后面就运行 [ -f "${folder}" ] || echo "${folder}不是文件" #||表示哦前面的不是真就执行后面的
以上这两个其实就是短路操作 &&是短路与 当前面的是假的后面的就不用运行了
||是短路或 当前面的是真的后面的不用运行了
for语句:
for var in [list]
do
#code block
done
例子:
for day in Sun Mon Tue Wed Thu Fri Sat do echo $day done
while循环:
while [ condition ]
do
#code block
done
例子:
read count echo "cout=${count}" a=1 add=0 while [ $a -le $count ] do add=`expr ${add} + ${a}` a=$(($a+1)) done echo "add=${add}"
注意了 要进行数学运行 要用`expr 1 + 1`(注意+左右的空格) 或者使用$((算数表达式)) 这样+左右没必要留空
util循环:
util [ condition ]
do
#code block
done
和while循环相反 condition为假时执行
Case语句:
case "$var" in #var可以是字符串 整数等等 限制比较小
condition1 )
;;
condition2 )
;;
* ) statments;;
esac #和case相反的写法
例子:
echo 输入一个字符 read key case "$key" in [A-Z] ) echo "输入的是大写字母";; [a-z] ) echo "输入的是小写字母";; [0-9] ) echo "输入的是数字";; * ) echo "输入的是其他字符";; esac
函数:
要先定义 再被调用
bash中创建一个函数:
fname(){
}
或者
function fname(){
}
使用函数时:
fname param1 param2 param3 ... 在函数内部视为位置参数处理
没参数 就直接用 fname
例子如下:
echo_all(){ for i #i读取参数列表的第一个 do echo "$i" shift #左移操作 以下的参数 左移一位则1被消去 但实际中发现这句即使不写也可以 done } echo_all 1 2 3 4 5 6 7 8 9 10
以上输出
1
2
3
4
5
6
7
8
9
10
还有种方式:
echo_all(){ for i in $* do echo "$i" done } echo_all 1 2 3 4 5 6 7 8 9 10