Chapter 1 如何才能学好shell编程
1.0多写、多写;每个代码都要写
Chapter 2 Shell脚本
2.1 什么是shell?
2.2 什么是shell脚本?
2.3 shell脚本的地位
2.4 shell脚本的种类 B shell(bash、sh)、C shell
2.5 常用的操作系统默认的shell
[root@bogon ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
[root@bogon ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
2.6 shell脚本的执行
执行顺序:查找ENV(/etc/profile .bash_profile .bashrc /etc/bashrc)加载环境变量;执行shell脚本内容
执行方式:sh ***.sh ./***.sh cat ***.sh | sh
基本规范:写解释器 写info 写注释
书写习惯:成对符号要一次性写出 中括号两端要留有空格 流程控制语句要写完 代码要缩进
引号使用:常规变量要双引号 a="/tmp/srm"
强引用(所见即所得)的要用单引号 echo ‘qwejklsdmkasj\asdj‘
命令引用要用反引号`whoami`
Chapter 3 shell变量
3.1什么是变量 不区分类型 分局部变量和全局变量
3.2环境变量
显示变量的值:set(所有变量) env(全局变量) declare(变量、函数等)
自定义环境变量:export a="123"或者declare -x a="1234"
[root@localhost ~]# export a="123"
[root@localhost ~]# echo $a
123
[root@localhost ~]# declare -x a="1234"
[root@localhost ~]# echo $a
1234
取消环境变量:unset
如何永久生效:写入环境变量
1.用户环境变量配置文件 /root/.bashrc /root/.bash_profile
2.全局环境配置变量/etc/profile,/etc/bashrc,/etc/profile.d/
显示环境变量?echo $a
3.3普通变量
3.3.1定义本地变量
将命令的结果作为变量的内容进行赋值··(反引号)或者$()
字符串拼接:直接拼接即可。tar -zcvf `uname -n`_$DATE.tar.gz /Storage/Plus/webapp/storage
3.3.2和awk、sed、grep配合使用
对sed、grep支持较好;awk不太好
Chapter 4 shell变量知识进阶与实践
4.1特殊且重要的变量
$0 shell脚本的执行路径+
$n 第n个参数,如果大于9,需要用{}引用,如${10}
$# 获取脚本传参的总个数
$* 获取后边的参数,加双引号代表“$1 $2 $3”
$@ 获取后边的参数,加双引号代表“$1” "$2" “$3”
$? 上一个状态的返回值
$$ 当前shell脚本的PID
$! 上一个在后台进程的PID
$_ 获取上一个命令或脚本的最后一个参数
[root@localhost ~]# sh /root/rpcbind.sh start 12ew 123
start
/root/rpcbind.sh $0
3 $#
start 12ew 123 $*
start 12ew 123 $@
4.2内置命令
echo
eval 当shell执行到eval语句时候,shell读入参数args,并将它们组合为一个新的命令并执行
exec 在当前shell执行命令,执行完毕后该shell终止
read 读取用户输入
4.3shell变量字符串知识
${parameter} 字符串内容
${#parameter} 字符串长度 wc -L / awk带的length函数、expr带的length函数
ARRAY=(
i
am
oldboy
linux
,
welcome
to
our
training
classroom
)
##shell数组的方法
for ((i=0;i<${#array[*]};i++));
do
if [ ${#array[$i]} -lt 6 ]; then
echo "${array[$i]}"
fi
done
echo "-----------------------------------"
##遍历数组的两种方法
for word in ${array[*]}
do
if [ `echo $word | wc -L` -lt 6 ];then
echo $word
fi
done
##for循环实现和第二种遍历数组方法差不多?!
for i in i am oldboy linux,welcome to our training classroom; do
if [[ `echo $i|wc -L ` -lt 6 ]]; then
echo $i
fi
done
##awk的方法 也是写for循环进行遍历,和C的方法一样
echo $ARRAY | awk ‘BEGIN{}{for(i=1;i<=NF;i++) if(length($i)<6) print $i}END{}‘
原文:http://www.cnblogs.com/wanyp/p/7507868.html