Linux学习笔记之shell

shell基础知识

shell种类:sh【linux】 如 bash、csh【unix】
不同的操作系统使用不同的shell,同一个kernel上可以使用不同的shell
1、查看使用shell:echo $SHELL
2、shell环境定义:

临时环境变量——仅当前环境有效
将临时变量永久生效——将环境变量定义写入到配置文件中
				【/etc/profile 针对系统所有用户生效】
				【$HOME/.bash_profile 特定用户生效】
系统预定义的环境变量 如:echo $PWD /$HOME /$PATH

3、shell脚本编程:

创建shell脚本
	i 首行:表示脚本将要调用的shell解释器,内容如:#!/bin/bash
	ii 注释:#开头的行(首行除外),如:#my first shell script
	iii 内容:可执行内容和shell结构

shell脚本的权限
	一般情况下,默认创建的脚本是没有执行权限的。
	赋予可执行权限:chmod +x first.sh

shell脚本的执行
	i   输入脚本的绝对路径或相对路径
		【/root/helloWorld.sh】  【./helloWorld.sh】
	ii bash或sh + 脚本
		【sh helloWorld.sh】
	iii 在脚本的路径前加 . 或source
		【source /root/helloWorld.sh】  【../helloWorld.sh】

4、shell变量:

变量设置规则:
	a. 变量名称可以用字母、数字、下划线组成,但不能以数字开头,环境变量名建议大写,便于区分;
	b. 在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型;
	c. 变量用等号连接值,等号左右两端不能有空格;
	d. 变量的值如果有空格,需使用单引号或双引号括起来。

变量分类:
	用户自定义变量、环境变量、位置参数变量和预定义变量。
	可以通过set查看系统中存在的所有变量。
	a. 用户自定义变量:由字母或下划线开头,由字母、数字或下划线序列组成,且大小写字母意义不同,变量名长度设有限制;
	b. 系统变量:保存和操作环境相关的数据,如$HOME,$SHELL,$USER等;
	c. 位置参数变量:主要用来向脚本中传递参数或数据,变量名不能自定义,变量作用固定;
	d. Bash中已经定义好的变量。

变量设置:习惯用大写字母命名变量,变量名以字母表示的字符开头,不能用数字。

变量调用:使用时在变量名前加上"$",echo查看变量值,如echo $A。

变量赋值:定义时赋值——变量=值(等号两端不能有空格)
				命令结果赋给变量——如 aa=$((4+5))
				变量赋给另一个变量——如 A=$STR

单引号和双引号的区别:
	现象:单引号的内容全部输出,双引号里的内容会有变化
	原因:单引号会将所有特殊字符脱意

删除变量:
	unset NAME
	注:用户自定义的变量,作用仅在当前的shell环境

read命令
	read [选项] 值
	read -p(提示语句) -n(字符个数) -t(等待时间) -s(隐藏输入)
	如:read -t 30 -p "please input your name:" name
		echo $name

运算符:
	格式:expr m+n 或 $((m+n))
	expr运算符之间要有空格

5、条件判断:

内置test命令——测试范围:整数、字符串、文件
	常用操作符号 [ ]表示,表达式写在 [ ]中
	[ expression ]  或  test expression
	expression首尾部都有空格

字符串测试:
	test str1==str2
	test str1!=str2
	test str1   是否不为空
	test -n str1  是否不为空
	test -z str1  是否为空
	注:可加 || 、&&

整数测试:
	test int1 -eq int2 是否相等
	test int1 -ge int2 [>=、-gt>、-le<=、-lt<]

文件测试:
	test -d file  指定文件是否目录
	[-e] 是否存在
	[-f] 是否常规文件 如:【-f /etc/services】
	[-L]文件存在并且是一个符号链接

	test -r file  指定文件是否可读
	-w  是否可写
	-x  是否可执行

多重条件测试
	条件1  -a  条件2  逻辑与     都成立为真
	条件1  -o  条件2  逻辑或     一个成立即为真
	!条件                逻辑非     取反

6、流程控制语句

if/else语句
单分支if条件语句:
		if [条件判断式]
			then
				程序块
		fi
	或者:
		if [条件判断表达式];
		then  
			程序块
		fi

多分支if条件语句
	if [条件判断式1]
	then
		程序1
	elif [条件判断式2]
	then
		程序2
		……
	else 
		程序n
	fi

case命令——多分支得if/else命令,以esac作为终止符
格式:
	CMD = $1
	case $CMD in
	start)
		echo "starting"
		;;
	stop)
		echo "stopping"
		;;
	*)
		echo "usage:{start/stop}"
	esac

for循环
	for ((条件))
	do
		程序
	done

while循环
	while  表达式
	do
		command
		……
	done

自定义函数
格式:  
	函数名()
		{	
			命令1……
			命令2……
			return  返回值变量
		}
	[function] funname[0]
	{
		action;
		return int;
	}
	function start()    或  function start
【注:shell函数必须先定义再调用。使用return value获取函数得返回值。函数在当前shell中执行可以使用脚本中得变量。】
	
脚本调试
 sh -x script  执行该脚本并显示所有变量的值
 set -x   对部分脚本进行调试
 sh -n script   不执行脚本只检查语法模式,并返回语法错误
 sh -v script   执行并显示脚本内容

7、awk和sed

cut  【选项】  文件名    默认分隔符是制片符
		-f   列号                 提取第几列
		-d  分隔符              按照指定分隔符分割列
cut的局限性:不能分割空格

<1>awk  一个强大的文本分析工具
	把文件逐行读入,以空格为默认分隔符将每行切开,切开的部分再进行各种分析处理。
	语法:awk  '条件1 {动作1}  条件2 {动作2}……'  文件名
 	FS内置变量——可指定分隔符
 	如:cat 文件名  awk ‘BEGIN{FS=":"}’

<2>sed  stream editor 非交互性文本交流编辑器
	编辑文件或标准输入导出的文本拷贝。
	并不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
	语法: sed [选项] ‘[动作]’ 文件名
	常用选项: -n 显示经过sed特殊处理的数据
					   -e 允许多点编辑
					   -i 直接修改读取的档案内容,而不是由屏幕输出。

8、定时器

<1>crontab 命令格式
	作用:用于生成cron进程所需的crontab文件
	crontab -e 使用编辑器编辑当前的crontab文件
<2>crontab 文件格式
	minute hour day-of-month month-of-year day-of-week commands
书写注意事项:
	a、全部不能为空,不知道的值用通配符*来表示任意时间
	b、每个时间字段可以指定多个值,不连续的值用逗号,隔开,连续的值用-隔开
	c、命令应该给出绝对路径
	d、用户必须具有对应的权限
可以用crontab运行多个任务:
	crontab -e 多个任务;

9、bash常用命令

history历史命令、命令别名、输入输出重定向、管道符、命令连接符、命令替换符、通配符。

你可能感兴趣的:(linux,shell,linux)