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
    

      

  • 相关阅读:
    react ts axios 配置跨域
    npm run eject“Remove untracked files, stash or commit any changes, and try again.”错误
    java 进程的参数和list的线程安全
    帆软报表 大屏列表跑马灯效果JS
    帆软报表 快速复用数据集,避免重复劳动
    分析云 OA中部门分级思路和实现方法
    分析云 分段器 只显示一个块的数据
    分析云 更改服务默认的端口号
    分析云U8项目配置方法新版本(2)
    Oracle 创建时间维度表并更新是否工作日字段
  • 原文地址:https://www.cnblogs.com/ashen/p/4564911.html
Copyright © 2011-2022 走看看