Linux入门:shell编程基础

shell 编程

变量

1、变量是以$开始的
2、变量分为:临时变量(只在shell中有效)和永久变量(在系统任何地方都可以执行,如:$SHELL
3、变量名必须是由字母``数字下划线组成,且以字母或下横线开头
4、变量名一般为大写
5、变量的定义:变量名=值等号左右没有空格

NUM=100
echo $NUM

100
TIME=`date`		#可要将其它命令结果赋值给变量,可以用命令替换符(``),即反引号
echo $TIME

Mon Nov 7 17:06:32 CST 2016
TIME=$(date +%F)		#date与“+”之前必须要有空格,+和%F之间不能有空格
echo $TIME

2016-11-07
DATE=$TIME		#可以将一个变量赋值给另一个变量
ABC="$DATE"		#变量可以被解释
ABC='$DATE'		#变量不被解释,当字符串

位置变量特殊变量

位置变量就是参数,参数都被叫做位置变量

ls -l file1 file2 file3
#在位置变量中:ls -l是$0
#在位置变量中:file1、file2就是位置参数$1、$2……$9
#sh xxx.sh /etc				#xxx.sh就是位置参数$0,/etc就是位置参数$1

特殊变量

$?				#判断上一条命令执行是否成功,成功返回0,不成功返回非0
$*				#列出所有参数
$$				#这个脚本的PID
$!				#执行上一个后台命令的PID
$#				#参数的个数
$0				#这个脚本的名称

read

从键盘读入数据,赋值给变量

read first second third			#read在等待用户数据的内容中,会依次将三个变量分别赋值给first、second、third
sh -x							#-x参数可以将脚本的执行过程展示出来,行首的“+”就是执行过程展示
#赋值少于变量数,最后的将是空值;如果赋值多于变量娄,那么将多余的值都赋值给最后一个变量

expr

变量算术运算,对整数行进行数学运算,小数点以后不进行计算

expr 2 + 3
expr 10 \* 3		#乘法需要用转义符

if语句

if [条件];then
	exp
elif [条件];then
	exp
else [条件];then
	exp
fi

流程控制语句

-a					#[a -a b]
-o					#[a -o b]
#[-e file] 如果file文件存在则为真 
#[-f file] 如果file存在且是一个普通文件则为真 
#[-a file] 如果file存在则为真
#[-d file] 如果file文件存在且是一个目录则为真 
#-a 和 -o 操作允许分别使用逻辑 AND 和 OR 来合并表达式,而一元操作符 ! 则是对测试含义取反。

退出语句

exit 0				#正常退出   非0为非正常退出

for语句

for 变量 in 名字表
do
	命令列表
done

case

case 变量 in 
	字符串1) 命令1
	;;
	字符串2) 命令2
	;;

esac
#字符串1就会在shell中找对应的字符串1

while

while [ 条件 ]		#如果条件为真,do中的命令一直会执行
do
	命令1
	命令2
done

shift

将脚本传递的参数依次进行递减,一般用于循环中

sh shift.sh 111 222 333
shift
sh shift.sh 222 333
shift
sh shift.sh 333
#这样的话,就可以使用$1进行挨个提取参数,然后进行运算

函数

使脚本的可读性比较好

start(){
	命令1
	命令2
}
#函数的调用,使用不带括号的函数名

#!/bin/bash
/usr/sbin/service nginx start   #系统命令必须是绝对路径

其它用户对脚本的执行权限

sh 脚本:
1、对脚本有r权限
2、对脚本所在目录的rx权限
脚本: #直接执行脚本
1、对脚本有rx权限
2、对脚本所在目录的rx权限

[root@bogon ~]# cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

awk

awk是一个强大的文本分析工具
awk其实很复杂,这里只是简单提一下,在shell中会用到

awk -F: '$3==0 {print $1}' /ect/passwd 
awk -F: 'length($2)==0 {print $1}' /etc/shadow
#默认是使用空格作为分隔符,用“-F”指定“:”,就以“:”作为分隔符

踢出登录用户

pkill -kill -t pts/2		#踢出pts/2这个连接
#还有一种踢出的方式,就是关闭这个用户的所有进程

非交互式设置用户密码

echo 123456 | passwd --stdin username
#--stdin                 从标准输入读取令牌(只有根用户才能进行此操作)

set

1、查看系统中定义的变量
2、删除变量使用unset NAME

附1

exit是一个库函数,exit(1)表示发生错误后退出程序, exit(0)表示正常退出。

对你的程序来说,没有区别。对使用你的程序的人或者程序来说,区别可就大了。
一般来说,exit 0 可以告知你的程序的使用者:你的程序是正常结束的。如果 exit 非 0 值,那么你的程序的使用者通常会认为你的程序产生了一个错误。

以 shell 为例,在 shell 中调用完你的程序之后,用 echo $? 命令就可以看到你的程序的 exit 值。在 shell 脚本中,通常会根据上一个命令的 $? 值来进行一些流程控制。

附2

-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
至于 ! 号那就是取非了

输入输出基本知识

1)默认地,标准的输入为键盘,但是也可以来自文件或管道(pipe |)。
2)默认地,标准的输出为终端(terminal),但是也可以重定向到文件,管道或后引号(backquotes `)。
3) 默认地,标准的错误输出到终端,但是也可以重定向到文件。
4)标准的输入,输出和错误输出分别表示为STDIN,STDOUT,STDERR,也可以用0,1,2来表示。
5)其实除了以上常用的3中文件描述符,还有39也可以作为文件描述符。39你可以认为是执行某个地方的文件描述符,常被用来作为临时的中间描述符。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章