zoukankan      html  css  js  c++  java
  • shell学习日志

    0.shell的变量同环境变量不同,存在用户环境区。
    	变量赋值的方式是:
    	variable_name = variable_value
    	a= "hello"
    	$a对a进行取值
    	关于变量,还需要知道几个与其相关的Linux命令。
    	首个字符必须为字母(a-z,A-Z)。
    	中间不能有空格,可以使用下划线(_)。
    	不能使用标点符号。
    	
    	env用于显示用户环境区中的变量及其取值;
    	set用于显示本地数据区和用户环境区中的变量及其取值;
    	unset用于删除指定变量当前的取值,该值将被指定为NULL;
    	export命令用于将本地数据区中的变量转移到用户环境区。
    	
    1.if 的使用
    	if …; then
    	…
    	elif …; then
    	…
    	else
    	…
    	fi
    2.循环语句
    	Shell Script中的循环有下面几种格式:
    	while [ cond1 ] && { || } [ cond2 ] …; do
    	…
    	done
    	for var in …; do
    	…
    	done
    	for (( cond1; cond2; cond3 )) do
    	…
    	done
    	until [ cond1 ] && { || } [ cond2 ] …; do
    	…
    	done
    	example:
    	for s in 1 2 3 4
    	do
    		echo $s
    	done
    
    	for s in 'this is a test!'
    	do 
    		echo $s
    	done
    3.case 
    	case var in
    	pattern 1 )
    	… ;;
    	pattern 2 )
    	… ;;
    	*)
    	… ;;
    	esac
    4.使用说明
    	$#表示包括$0在内的命令行参数的个数,$*表示整个参数列表,不包括$0,也就是说不包括文件名的参数列表。$$ 表示当前Shell进程的ID,即pid,看下面的代码:$echo $$
    	变量	含义
    	$0	当前脚本的文件名
    	$n	传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
    	$#	传递给脚本或函数的参数个数。
    	$*	传递给脚本或函数的所有参数。
    	$@	传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
    	$?	上个命令的退出状态,或函数的返回值。
    	$$	当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
    	
    	$* 和 $@ 的区别
    	$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
    
    但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
    	
    	-lt 小于    -gt 大于  -le等于 例子:if [ $# -lt 3 ]; then...
    	[]表示条件测试,常用的条件测试有:[ -f "$file" ] 判断$file是否是一个文件
    									[ $a -lt 3 ] 判断$a的值是否小于3,同样-gt和-le分别表示大于或小于等于
    									[ -x "$file" ] 判断$file是否存在且有可执行权限,同样-r测试文件可读性
    									[ -n "$a" ] 判断变量$a是否有值,测试空串用-z
    									[ "$a" = "$b" ] 判断$a和$b的取值是否相等
    									[ cond1 -a cond2 ] 判断cond1和cond2是否同时成立,-o表示cond1和cond2有一成立
    	shift 				将参数列表中的第一个,后面的参数依次变为新的第一	,注意参数列表原本也不包括$0。				
    
    5.只读变量 readonly var
      删除变量 unset var 变量被删除后不能再次使用;unset 命令不能删除只读变量。
    
    6.	Shell变量替换,命令替换,转义字符
    	a = 10
    	echo -e  "$a 
    " 
    	-e 表示对转义字符进行替换。输出10 不加-e输出10 
    
    		
    	转义字符	含义
    	\	反斜杠
    	a	警报,响铃
    		退格(删除键)
    	f	换页(FF),将当前位置移到下页开头
    	
    	换行
    	
    	回车
    			水平制表符(tab键) 
    	v	垂直制表符
    	
    	命令替换
    	命令替换的语法`command`
    	例:DATE=`date`	
    	echo "Date is $DATE"
    	
    	
    	变量替换
    	形式	说明
    	${var}	变量本来的值
    	${var:-word}	如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
    	${var:=word}	如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
    	${var:?message}	如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
    	若此替换出现在Shell脚本中,那么脚本将停止运行。
    	${var:+word}	如果变量 var 被定义,那么返回 word,但不改变 var 的值。
    
    7.shell的运算符
    	使用expr,它是一款表达式计算工具。例:val=`expr 2 + 2`
    											echo "Total value : $val
    	
    	算术运算符列表
    	运算符	说明	举例
    	+	加法	
    	-	减法	
    	*	乘法	
    	/	除法	
    	%	取余	
    	=	赋值	
    	==	相等。用于比较两个数字,相同则返回 true。	
    	!=	不相等。用于比较两个数字,不相同则返回 true。	
    	
    	关系运算符
    	-le	检测左边的数是否小于等于右边的,如果是,则返回 true。	
    	-ge	检测左边的数是否大等于右边的,如果是,则返回 true。		
    	-lt	检测左边的数是否小于右边的,如果是,则返回 true。
    	-gt	检测左边的数是否大于右边的,如果是,则返回 true。
    	-ne	检测两个数是否相等,不相等返回 true。
    	-eq	检测两个数是否相等,相等返回 true。
    	
    	布尔运算符
    	!非运算,表达式为 true 则返回 false,否则返回 true。
    	-o	或运算,有一个表达式为 true 则返回 true。、
    	-a	与运算,两个表达式都为 true 才返回 true。
    	
    	
    	字符串运算符列表
    	运算符	说明	举例
    	=	检测两个字符串是否相等,相等返回 true。	[ $a = $b ] 返回 false。
    	!=	检测两个字符串是否相等,不相等返回 true。	[ $a != $b ] 返回 true。
    	-z	检测字符串长度是否为0,为0返回 true。	[ -z $a ] 返回 false。
    	-n	检测字符串长度是否为0,不为0返回 true。	[ -z $a ] 返回 true。
    	str	检测字符串是否为空,不为空返回 true。	[ $a ] 返回 true。
    	
    	
    	文件测试运算符列表
    	操作符	说明	举例
    	-b file	检测文件是否是块设备文件,如果是,则返回 true。	[ -b $file ] 返回 false。
    	-c file	检测文件是否是字符设备文件,如果是,则返回 true。	[ -b $file ] 返回 false。
    	-d file	检测文件是否是目录,如果是,则返回 true。	[ -d $file ] 返回 false。
    	-f file	检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。	[ -f $file ] 返回 true。
    	-g file	检测文件是否设置了 SGID 位,如果是,则返回 true。	[ -g $file ] 返回 false。
    	-k file	检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。	[ -k $file ] 返回 false。
    	-p file	检测文件是否是具名管道,如果是,则返回 true。	[ -p $file ] 返回 false。
    	-u file	检测文件是否设置了 SUID 位,如果是,则返回 true。	[ -u $file ] 返回 false。
    	-r file	检测文件是否可读,如果是,则返回 true。	[ -r $file ] 返回 true。
    	-w file	检测文件是否可写,如果是,则返回 true。	[ -w $file ] 返回 true。
    	-x file	检测文件是否可执行,如果是,则返回 true。	[ -x $file ] 返回 true。
    	-s file	检测文件是否为空(文件大小是否大于0),不为空返回 true。	[ -s $file ] 返回 true。
    	-e file	检测文件(包括目录)是否存在,如果是,则返回 true。	[ -e $file ] 返回 true。
    8.shell字符串
    	单引号字符串的限制:
    	单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    	单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
    	
    	双引号的优点:
    	双引号里可以有变量
    	双引号里可以出现转义字符
    	
    	拼接字符串用双引号
    	取字符串长度:string="abcd"   echo ${#string} #输出 4
    	提取子字符串:string="alibaba is a great company"   echo ${string:1:4} #输出liba
    	查找子字符: string="alibaba is a great company"   echo `expr index "$string" is`
    	
    	从位置处抓取字串 
      expr substr "this is a test" 3 5 
    	is is 
    
    9.shell 中数组
    	在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:
        array_name=(value1 ... valuen)
    	
    	获取数组的长度# 取得数组元素的个数
    	length=${#array_name[@]}
    	# 或者
    	length=${#array_name[*]}
    	# 取得数组单个元素的长度
    	lengthn=${#array_name[n]}
    10.重定向到文件
    	echo "abc">a.txt
    	printf也可以输出
    	test 命令用于检查某个条件是否成立,与方括号([ ])类似。
    11.case语句
    
    	echo "input a:"
    	read a
    	case $a in
    		#1)  echo "1");;
    		1)  echo 'You select 1';;
    		2)  echo '2'
    		;;
    		*)  echo "oth"
    		;;
    	esac
    	
    12.重定向
    	命令	说明
    	command > file	将输出重定向到 file。
    	command < file	将输入重定向到 file。
    	command >> file	将输出以追加的方式重定向到 file。
    	n > file	将文件描述符为 n 的文件重定向到 file。
    	n >> file	将文件描述符为 n 的文件以追加的方式重定向到 file。
    	n >& m	将输出文件 m 和 n 合并。
    	n <& m	将输入文件 m 和 n 合并。
    	<< tag	将开始标记 tag 和结束标记 tag 之间的内容作为输入。
    13.文件包含
    	像其他语言一样,Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本。
    	Shell 中包含脚本可以使用:
    	. filename
    	或
    	复制纯文本新窗口
    	source filename
    

      

  • 相关阅读:
    css中的背景、渐变 文本格式化和表格的常用属性
    HTML5中常见的英文单词
    matlab文件处理
    优先级队列
    编程珠玑(一)
    排序算法之希尔排序
    自己写的矩阵类Matrix
    排序算法之快速排序
    Thoughtworks公司面试题——MARS ROVERS问题
    matlab画图
  • 原文地址:https://www.cnblogs.com/ashen/p/4564911.html
Copyright © 2011-2022 走看看