linux shell

1: 什么是shell ?
Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。
─gnome-terminal-─┬─bash───pstree
 终端进程   bash进程  pstree进程
Linux系统提供多种不同的Shell以供选择。常用的有Bourne Shell(简称sh)、C-Shelll(简称csh)、Korn Shell(简称ksh)和Bourne Again Shell (简称bash)。
在linux中可以通过 env命令 得到整个系统的环境变量, 
其中
gec@gecubuntu:~$ env
SHELL=/bin/bash    --- 当前选用的shell版本

2: bash命令
  命令   命令选项   命令参数
  ls        -l        file1    file2    ---  命令的参数1 2 3

3: shell 脚本
shell脚本的编写规则
1)指定对应的shell在哪里
#!/bin/bash       
2)命令行操作
3)如果单独出现的是# 在shell脚本中表示注释 ,也就是不执行的语句
编写完脚本文件后,要注意修改脚本文件的操作权限,使其可以执行。

如果使用windows下的软件编写的shell脚本,通常在linux环境中是执行不了的,原因是windows中回车键对应的是\r\n,而linux中只认\n, 所以会提示/bin/bash\r找不到


4:常规要使用的命令
1)文本的输入输出
echo   内容 > 文件名      清空写入
echo   内容 >> 文件名     追加写入  


RESULT=`whoami`      定义了一个变量RESULT
是波浪纹按键对应的反引号``,不是单引号’’!!!!
命令置换,可以实现把命令的输出结果当成是变量或者是其它命令的输入
所以,以上命令是把whoami命令的输出结果,当成是RESULT变量的输入
echo RESULT=$RESULT  使用变量的值
打印的是RESULT变量的值

5:shell脚本的基本语法
变量:让某一个特定字符串代表不固定的内容
1)用户自定义变量
变量名=初值

2)环境变量
PATH
SHELL
可以通过env命令得到全部环境变量列表
打印环境变量PATH值:  echo $PATH
修改变量SHELL值:     SHELL=/bin/sh

3)预定义变量
变量名	含义
$# 	表示位置参数的数量 
$*	表示所有位置参数的内容 
$?	表示命令执行后返回的状态,用于检查上一个命令的执行是否正确;在Linux中,命令退出状态为0表示命令正确执行,任何非0值表示命令执行错误 
$$	表示当前进程的进程号 
$!	表示后台运行的最后一个进程号 
$0	表示当前执行的进程名 



5)其他
变量的输出 -----相当于C语言中的 extern 
export DAY
自定义变量的清除 
unset DAY 

变量与变量内容以一个等号=来连结
等号两边不能直接接空格符
变量名称只能是英文字母与数字,但是开头字符不能是数字变量内容若有空格符可使用双引号"或单引号’将变量内容结合起来 
双引号内的特殊字符如$等,可以保有原本的特性可用跳脱字符 \ 将特殊符号变成一般字符;
在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』。
若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容
若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量。

输入输出语句
echo  “hello world”
echo  “hello   $name”     name变量的值会打印出来
-e 表示解析转义字符 
-n 回车不换行
linux默认回车换行
控制字符:\c--不换行;\t--跳格;\n--换行

从键盘上键入值 使用read 变量名
如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直至遇到回车。如果给出了两个变量,
shell将用空格作为变量之间的分隔符。如果变量数少于单词数,那么第一个单词将被赋给第一个变量,
字符串后面的部分将被全部赋给第二个变量。

command  1> file
command  > file	把标准输出重定向到一个新文件中

command  1>> file
command   >> file	把标准输出重定向到一个文件中(追加)

command  2>  file	把标准错误重定向到一个文件中
command  2>> file	把标准输出重定向到一个文件中(追加)

command   <  file
command   0<  file	command命令以file文件作为标准输入


控制流语句
分支跳转
if
1)if  [  command  ]; then
       other commands
fi

2)if [ command ]
 then
       other commands
fi

3)if [ command ]; then
      other commands
else
      other commands
fi

#如果输入值比10小就输出一个less, 否则输出more
#!/bin/bash
read  num
if [ $num -le 10 ] ;then
	echo LESS or EQUAL!
else 
	echo MORE!!	
fi

4case  $变量名称 in   <==关键词为 case 
  “第一个变量内容”)   <==变量内容建议用双引号括起来,关键词则为小括号 ) 
  程序段 
  ;;            <==每个类型结尾使用两个连续的分号来处理! 
 
 “第二个变量内容") 
  程序段 
  ;; 
 
 *)                 <==最后一个变量内容都会用 * 来代表所有其他值 
  不包含第一个变量内容与第二个变量内容的其他程序执行段 

  exit 1 
  ;; 
esac                  <==最终的 case 结尾!『反过来写』思考一下!


#输入“zhangsan” 显示“优秀”
#输入“lisi” 显示“soso ”
#输入“wangwu” 显示“so bad”
#!/bin/bash
read -p "please enter a name: " name
case $name  in 
	"zhangsan")
		echo 优秀!
	;;
	"lisi")
		echo soso
	;;
	"wangwu")
		echo so bad
	;;
	*)
		echo error input!!
	;;
	esac

循环控制while
while  [  condition  ]  <==中括号内的状态就是判断式(如果为真则执行循环体) 
do                <==do 是循环的开始! 
      程序段落 
done             <==done 是循环的结束 

while : 表示恒为真

#从键盘得到10个数据,得到10个数据的最大值
#!/bin/bash
cnt=10
max=
while [ $cnt -gt  0  ]
do
	read -p "please enter: "  num
	if [ -z  $num ]
	then 
		continue
	fi
        if [ $cnt -eq 10 ]
	then
		max=$num
	else
		if test $max -lt $num  
		then 
			max=$num
		fi
	fi
	cnt=$(($cnt-1))
	echo cnt=$cnt
done
echo the max number is $max


for
for  var   in   con1 con2 ...   令var值依次取列表中的值
do 
      程序段 
done 


#打印指定目录下的所有目录项, 说明是普通文件还是目录文件
#!/bin/bash
for  name  in `ls $1`
do
	if [ -d  $1/$name ]
	then 
 		echo $name is dir
	else
		echo $name is file
	fi
done

判断语句
数值测试:
1)数值比较使用的是SHELL表达方法 test语句
算术比较	        结果
expr1 –eq expr2	两个表达式相等则结果为真
expr1 –ne expr2	两个表达式不等则结果为真    no  equal 
expr1 –gt expr2	expr1 大于 expr2 则结果为真   great  than
expr1 –ge expr2	expr1 大于或等于 expr2 则结果为真  great  or  equal
expr1 –lt expr2	expr1 小于 expr2 则结果为真
expr1 –le expr2	expr1 小于或等于 expr2 则结果为真
if  [ $cnt  -lt  10  ]相当于if  test  $cnt  -lt  10 


2)数值比较也可以使用C语言写法
expr 命令可以直接进行数学运算
等价于$(( argument operator argument ))  
数值运算
	cnt=$(($cnt-1)) 相当于cnt=`expr  $cnt-1 `

#从键盘输入两个数值和它们对应的运算符
#! /bin/bash
while :
do
read -p "please input 运算表达式 :" num1 fuhao num2
result=$(($num1 $fuhao $num2))
echo result=$result
done

3)字符串测试  test     [  ]
操作符	含义()
=	相等
!=	不等
-z 	空串
-n 	非空串

4)文件状态测试 test
文件条件测试			结果
-e file					文件存在则结果为真    exist
-d file					文件是一个子目录则结果为真
-f file					文件是一个普通文件则结果为真
-s file					文件的长度不为零则结果为真   size
-r file					文件可读则结果为真
-w file					文件可写则结果为真
-x file					文件可执行则结果为真


5)逻辑测试
逻辑操作										结果
	! expr								逻辑表达式求反 
expr1 –a expr2					两个逻辑表达式“And”(“与”)
expr1 –o expr2					两个逻辑表达式“Or”(“或”)

定义一个数组
变量名=(元素的值用空格隔开 )
用${数组变量名[下标]}表示对应的数组元素
要通配数组中的每个元素 使用 ${数组名[*]}
要表示整个数组的所有元素  使用 ${数组名[@]}  at
要重新对数组元素进行赋值   数组名[下标]=新值
不需要事先确定数组的大小,可以调整

#定义一个数组, 给数组赋值并打印出最终的数组值
#!/bin/bash
arr=(15 26 8 4 5)
#arr=
#echo ${arr[0]}
for i in  ${arr[*]}
do
	echo $i
done
for j  in `seq 0  7`
do
	read -p "please enter a num: "   arr[$j]
done 
echo  ${arr[@]}


函数的定义
function  函数名()
{
}

函数名()
{
}
函数调用
直接写函数名
如果需要给函数传入参数, 直接在函数名后写参数

return  返回值
可以使用$? 查看函数的返回值


#!/bin/bash
hello ( )
{
	echo "hello world"
	echo $0 #  ---------- 表示的是进程名!!!!  
	echo $1 # 函数调用时候传入的参数 
	echo $2 
	echo $3
}

echo $1 $2 $3 # SHELL脚本执行时候传入的参数
echo "start"
hello

echo "2nd"
hello apple  tree boy # 传入了3个函数的参数

echo "3rd"
hello $1 $2 $3 #shell执行时候传入的参数传给了函数

echo "end"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值