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) 收藏 举报
浙公网安备 33010602011771号