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。
	$#	传递给脚本或函数的参数个数。
	$*	传递给脚本或函数的所有参数。
	[email protected]	传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
	$?	上个命令的退出状态,或函数的返回值。
	$$	当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

	$* 和 [email protected] 的区别
	$* 和 [email protected] 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"[email protected]" 会将各个参数分开,以"$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 \n"
	-e 表示对转义字符进行替换。输出10 不加-e输出10 \n

	转义字符	含义
	\\	反斜杠
	\a	警报,响铃
	\b	退格(删除键)
	\f	换页(FF),将当前位置移到下页开头
	\n	换行
	\r	回车
	\t	水平制表符(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

  

时间: 2024-10-27 05:58:12

shell学习日志的相关文章

Linux学习日志1-基本知识

1.冯.诺依曼体系计算机五大组成部件: 1.控制器:控制其他四个部件的运作 2.运算器:负责计算加减乘除 3.存储器:存放运算的数据来源与结果 4.输入设备:接收数据输入存入存储器 5.输出设备:从存储器接收数据输出 2.Linux的起源: 1991年一个芬兰大学生Linus Torvalds参考其老师的教学用操作系统Minix的思想(注意仅仅是思想),自己写了一个操作系统内核,命名为Linux 0.0.1,发布在comp.os.minix新闻组上,正式宣告Linux内核的诞生.从那时起,Lin

linux学习日志

Linux学习日志 基本用户接口模式是shell ,乌班图一般是用 terminal这个终端来输入命令 F11全屏,ctrl+shift+"+" 变大,ctrl+-变小. 命令格式 命令  [参数] [操作对象] cmd    options  opreation cd ~ 回到用户主目录 ls 查看目录下的内容 ./当前目录 ../父目录 ls -l pwd 可以查看当前工作目录 print working directory man 命令名 可以查命令帮助 cd 切换目录 touc

ADB Shell学习

ADB Shell 学习 又是一个周末了,最怕闲来无事的周末,于是给自己找点事情做,ADB shell这一块一直没有系统的学习,正好趁此机会学习. 主要通过学习资料和adb –help文档学习 怎么使用ADB shell命令 首先找到Andorid的SDK安装路径或者单独安装ADB组件,sdk中adb路径在 cd <adb-path> #执行adb命令 adb shell Mac下 #配置adb环境变量 vi ~/.bash_profile #编辑该文件,添加你的adb路径 export AD

Shell学习之Shell特性(一)

Shell学习之Shell特性 目录 命令和文件自动补齐功能 命令历史记忆功能 history.上下键.!number.!string.!$.!! 别名功能 alias.unalias cp.~username/.bashrc.\cp -rf /etc/hosts 快捷键 ^R ^D ^A ^E ^L ^U ^K ^S ^Q 前后台作业控制 输入输出重定向 输入与输出 管道 | tee 命令排序 命令和文件自动补齐功能 这个不说了,我们在输入命令的时候,按tab键补全. 命令历史记忆功能  hi

winform学习日志(二十三)---------------socket(TCP)发送文件

一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using Sys

Linux学习日志2-vim使用基础

vim是linux操作系统下的一个文本编辑工具,功能非常强大,但刚学习起来比较复杂.vim的所有功能要讲明白得有几百页,在这里只是记录一下vim的一些基本用法. 首先vim打开文件的三种方式: vim +# xxx(#是数字):表示打开xxx文件并将光标定位到指定行. vim -o xx1 xx2 xx3:表示同时打开三个文件,垂直分割显示 vim -O xx1 xx2 xx3:表示同时打开三个文件,水平分割显示 多个文件间跳转:键入ctrl+w后:→向左.←向右.↑向上.↓向下 vim打开文件

Linux学习日志day1——无人值守系统安装DHCP+TFTP+PXE+Kickstar

Linux学习日志day1--无人值守批量系统远程网络安装(DHCP+TFTP+PXE+Kickstar)                                         --作者:江信瀚 服务器环境介绍: 主机名:workstation.example.com 关闭SElinux以及防火墙 虚拟机:VMware(关闭了VMware的DHCP服务) 网卡配置: 静态IP获取! IPV6全部都删除,因为根本用不到 子网IP可以在VMware中设置 8.8.8.8是谷歌的DNS服务器

shell学习之tr命令

tr命令不接受指定的文件参数,而只是对标准输入进行翻译, tr是translate的简写,亦即翻译,需要注意的是,它不能翻译句子,只能翻译单个字符. 首先,定义变量:     [[email protected]]#A=1,,2,,,3,,,4,,,5 下面以示例对该命令以及其常用选项进行介绍. 示例: 1.  无选项设置情况     [[email protected]]# echo $A | tr  ',' ' '         1 2   3   4   5     [[email pr

Cocos2d-x 3.1.1 学习日志4--cocos2d-x解决中文乱码问题的几种办法

做个打飞机的游戏,由于版本太新,网上基本没有教教程,我的版本是cocos2d-x 3.1.1的,今天遇到cocos2dx中中文乱码的问题.无奈只好Google百度寻求答案,明白了这个问题的缘由.因为cocos2d-x内部是以utf8处理文本的,而VS直接输入时文本编码为GBK,如果添加L标志,则为Unicode编码. 解决这个问题有三种办法: 将源代码文件保存为utf8编码,不过由于编译器的问题,这种方式会导致很多无法预测的问题 将字符串用utf8编码集中存到一文件中,然后用代码读取这些字符串来