zoukankan      html  css  js  c++  java
  • 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{}'
    

      

  • 相关阅读:
    Bootstrap in ASP.NET MVC 5
    Chrome 实用调试技巧
    C#数组
    ASP.NET MVC 表格操作
    jQuery实用Demo
    MySQL学习笔记
    ASP.NET MVC View中的标签(tag)
    ASP.NET MVC HtmlHelper 类的扩展方法
    Delphi按下F1不能出现帮助文档的解决方法
    Delphi函数参数传递 默认参数(传值)、var(穿址)、out(输出)、const(常数)四类
  • 原文地址:https://www.cnblogs.com/wanyp/p/7507868.html
Copyright © 2011-2022 走看看