shell编程
bash配置
vi ~/.bash_profile 这是bash初始化的目录
环境变量
reset 将整个环境重置一下
set 获取所有的变量
env 查看所有的全局变量
export AAA 将AAA编程全局变量,这样子shell就可以访问AAA的值了
export aaa=fsdf 定义全局变量的值
PATH=$PATH:/tmp/ddd
常用变量
!213 调用213号历史指令
!! 上一个命令
!$ 上一个命令的最后一个参数
$# 参数个数
$* 参数数组
$$ shell脚本的进程id号
echo $? 返回上一个命令的返回值 如果为0表示返回值是true
echo $aaa aaa变量的值
{}表示枚举
touch {a,b,c}-{1,2,3} 将创建9个文件
touch a b 创建了两个 a b文件
touch "a b" 创建了一个文件
echo `ls` 执行命令ls
;用来分隔多个命令
echo hello;ls /home/ding
变量赋值
pgrep httpd 返回的是一串pid
aaa=`pgrep httpd`将执行结果赋值给变量
#表示注释
在shell脚本声明
#!/bin/bash
第一个字符非#,表示这是一个bash脚本
第一个字符是#,但第二个字符不是!,表示这是一个csh脚本
第一个字符是#,且第二个字符是!后面就是指定脚本的路径了
bash本身是不支持正则表达式的,但某些命令支持如grep ,awk等命令
在shell文件中如果一行写多个命令,命令之间用 ; 隔开
判断表达式[ expression ]
字符串测试
运算符 说明
string 判断string是否是非空
-n string 判断string是否是非空
-z string 判断string是否是空串
string1 = string2 判断string1和string2是否相等
string1 != string2 判断string1和string2是否不相等
[ $USER = root ] 判断是否相等 =号两边空格不能忘记 判断字符串是否相等
user=root 赋值
整数测试
[ num1 op num2 ]
运算符 说明
num1 -eq num2 等于
num1 -ne num2 不等于
num1 -gt num2 大于
num1 -ge num2 大于或等于
num1 -lt num2 小于
num1 -le num2 小于或等于
[ $# -eq 0 ] 判断数值是否相等
文件测试
[ op file ]
运算符 说明
-a file file是存在
-b file file是存在,且为块文件
-c file file是存在,且为字符文件
-d file file是存在,切为目录
-e file file是存在,同-a
-f file file存在,且为常规文件
-s file file是否为非空文件
-L file file是否为符号链接
-r file file是否可读
-w file file是否可写
-x file file是否可执行
[1-9] 表示1-9 正则表达式中的判断
[ -f /etc/passwd ] 判断/etc/passwd是否是一个文件
[ -d /oracle/ ] 判断是否是一个目录
算数表达式
i=i+10;
((i=i+10))
((i=i%10))//取余
((i=i**10))//求幂
输入
read aaa 输入变量值
read -p "please input your name:" AAA 提示输入变量值
输出
echo
printf
调试
bash -vx ./test.sh 调试执行过程
函数声明
匿名函数
()用来声明函数的
命名函数
aaa()
{
}
定义了一个aaa函数
流程控制
选择判断
read aaa
if [ $aaa = ding ];then
echo "";
elif [ express ];then
echo ""
else
echo ""
fi
switch判断
read aaa
case $aaa in
ding )
echo hello world
;;
root )
echo nice to meet your
;;
* )
echo ksdljf
;;
esac
for语句
for i in aaa
do
kill -9 $i
done
seq 1 100 返回1 到 100 的所有整数
for i in "`seq 1 9`"
sleep 1 休息一秒
while语句
while [ i -lt 100 ]
do
i=$[$i+1]
echo -n "$i "
done