shell 编程

1.执行bash脚本四种方式
   source aa.sh 当前线程执行
   . aa.sh  当前线程执行
   bash aa.sh   开启新线程执行(export)
   ./aa.sh 当前线程shell脚本   &后台执行
   文件头部加 #!/bin/bash,然后chmod +x aa.sh (必须增加权限才能访问)  
2.shell打印java_home
   a.编辑/etc/profile,    
      在末尾增加export JAVA_HOME=/usr/java/jdk1.7.0_67
                         export PATH=$PATH:$JAVA_HOME/bin
      可以通过 :! ls -a /user/java/  搜索java路径
    b.再source /etc/profile重新加载到bash环境
    c.echo $JAVA_HOME和jps能打印对应信息
3.函数
    
4.0标准输入 1标准输出 2错误输出
   
   a. 输出到文件
       ls -l / /kkk 1> aa1.txt 2> aa2.txt    将标准输出重定向到aa1.txt  将错误输出到aa2.txt      kkk不存在(错误)
   b. 输出到流
       ls -l /kkk 1>aa2.txt  2>& 1   先让输出流指向文件,再由错误流指向输出流
   c. >重定向  >>重定向并追加
5.read aa         标准输入到aa
   
   
6.开辟socket通讯
   
   向百度发请求后得到对应信息,(在普通目录获取不到信息??)
   
7.变量:
   var01="kkk"  
   显示:echo var01或echo $var01 或echo ${var01}
   
     管道:前后命令会放在子shell中执行
      
      echo $$ | more (特殊) 父子shell线程,谁先看到谁先执行
      echo $BASHPID   子线程执行
8.数组: shell中以空白符为切割 
   
9.export 引入变量,父进程修改,子进程修改;子进程修改不影响父进程,不改变旧值
   fork() :创建子进程  同步变量值
   unset:取消变量
   set:查看shell的变量  
10.'a':弱引用  "a":强引用  花括号扩展不能被引用  a{1,2,3} x
   
    
    
11.expr移植性最好
    
     
      
12.添加用户,静默输出
     
      ${#1} 取参数的长度
13.seq 5会产生1-5的序列,需先对seq进行命令替换
     
 查找最大文件执行:./findMaxSize.sh ./
     
读文件并统计行数,管道会开启父子进程,因此需要慎重使用
#!/bin/bash

oldIFS=$IFS
IFS=$'\n'
sum=0
for line in `cat ./red.txt`;do

echo $line
((sum++))
done
echo $sum
IFS=$oldIFS
echo "---------------------------------"

sum=0
lines=`cat red.txt | wc -l`
for((i=1;i<=lines;i++));do
line=`head -$i red.txt | tail -1`
echo $line
((sum++))
done
echo $sum
echo "----------------------------------"

sum=0
while read line;do
echo $line
((sum++))
done < ./red.txt
echo $sum
echo "-----------------------------------"

export sum=0       //sum结果为0,怎么搞?
cat red.txt | while read line;do
echo $line
((sum++))
done
echo $sum



















posted on 2018-03-06 18:13  xiaojiayu0011  阅读(94)  评论(0)    收藏  举报

导航