shell-01

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 'qwejklsdmkasjasdj'
							命令引用要用反引号`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函数
	${parameter:offset} 从位置offset之后开始提取子串到结尾
		[root@bogon ~]# a=asdadadasdad
		[root@bogon ~]# echo ${a:1}   ##sdadadasdad
	${parameter:offset:length} 从位置offset之后开始提取长度为length的子串 	
		[root@bogon ~]# echo ${a:1:2}
		sd
	${parameter#word}	从头开始删除最短匹配字符串
	${parameter##word}	从头开始删除最长匹配字符串
	${parameter%word}	从尾开始删除最短匹配字符串
	${parameter%%word}	从尾开始删除最长匹配字符串
		[root@bogon ~]# echo ${a#a*d}
		adadasdad
	${parameter/pattern/string} 使用string替换第一个匹配的string
	${parameter//pattern/string} 替换所有
	
	计算长度的示例
	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{}'

  

原文地址:https://www.cnblogs.com/wanyp/p/7507868.html