Linux脚本写学生信息表,linux 编写shell管理脚本01

shell的作用及常见的种类

介于操作系统内核与用户之间,负责接收用户输入的命令指令并进行解释,即命令解释器

Bsh实现了最基本的命令解释功能,同时作为脚本程序语言

Csh因使用C语言风格而得名

Ksh由AT&T贝尔实验室的David Korm开发完成,兼具Bsh的语法和Csh 的交互性Bash是Bsh的升级代替品,是GNU项目的成员,目前大多Linux版本都使用其作为默认shellZsh更多地基于交互式操作进行设计的shell程序,集成了Bash、Ksh、等多种shell的优点Shell环境的切换查看当前linux系统中能够使用的shell程序的列表

[root@localhost ~]# cat /etc/shells确认shell程序中存在的部分链接文件

[root@localhost ~]# ls -l /bin/*sh切换至tcsh程序的shell环境 ,并验证是否还能使用help内部指令和外部命令ls

[root@localhost ~]# ksh

# help cd

ksh: help: not found  [没有那个文件或目录]

# ls -l anaconda-ks.cfg

-rw------- 1 root root 1286 10-17 19:46 anaconda-ks.cfg

# exit       //返回原来的Bash环境

使用teacher用户登录系统,并将自己的登录shell更改为tcsh

[teacher@localhost ~]$ grep "teacher" /etc/passwd

teacher:X:505:505::/home/teacher:/bin/bash

[teacher@localhost ~]$ chsh

Changing shell for teacher.

Password:

New shell [/bin/bash]: /bin/tcsh

Shell changed.

[teacher@localhost ~]$ grep teacher /etc/passwd

teacher:X:505:505::/home/teacher:/bin/tcsh

由root用户使用usermod命令将teacher用户的登录shell重新修改为“/bin/bash”

[root@localhost ~]# usermod -s /bin/bash teacher

[root@localhost ~]# grep "teacher" /etc/passwdBash常用功能

1.命令历史功能history

可通过编辑文件/etc/profile文件设置历史命令的保存条数(全局)

用户宿主目录中的 ./bash_profile(优先级高)

history-c清楚命令历史

2.命令别名

alias列出所有的名别名

unalias[命令别名]取消指定的命令别名

unalias-a取消所有当前环境中设置的命令别名

3.标准输入输出重定向

Ø标准输入默认设备是键盘。文件编号为0

Ø标准输出默认设备显示器,文件编号 1

Ø标准错误显示器2

输出重定向“>”“ >>”

输入重定向“

错误重定向“2>”“2>>”

输出,错误输出 可以使用 “>” “2>”重向不同文件。 使用 “&>”重定向同一文件

4.管道操作

将前面命令的输出作为后边命令的输入

cut分割通过管道输入的每一行,

-d 使用的分割符合 ,

-f 指定只显示分割出的行

使用“!wh”调用历史命令中最近一次以“wh”开头的命令并执行。

[root@localhost ~]# which fdisk

/sbin/fdisk

[root@localhost ~]# pwd

[root@localhost ~]# !wh

查看用户最后执行的三条历史命令记录

[root@localhost ~]# history | tail -3

通过“!序号”的形式执行用户历史命令列表中的第830条命令

[root@localhost ~]# !830将所有用户记录历史命令的条数设置为200

[root@localhost ~]# vi /etc/profile

将用户jerry的历史命令记录的条数设置为5,重新选择后确认效果

[jerry@localhost ~]$ vi ~/.bash_profile

export HISTSIZE=5

[jerry@localhost ~]$ history | wc –l

使用teacher用户登录,执行“history –c” 命令已清空自己的命令历史记录。

[teacher@localhost ~]$ history | tail -2

18  cd

19  history | tail -2

[teacher@localhost ~]$ history -c

[teacher@localhost ~]$ history

1        history

查看已设置的所有命令别名

[root@localhost ~]# alias

使用预设的别名“ll”实现“ls -l”命令的功能

[root@localhost ~]# ll install.log

设置一个命令别名dir,以便执行“ls –ld –color=tty”的命令,并进行确认。

[root@localhost ~]# alias dir='/bin/ls -ld --color=tty'

[root@localhost ~]# alias dir

alias dir='/bin/ls -ld --color=tty'

[root@localhost ~]# dir install.log

-rw-r--r-- 1 root root 36318 10-17 19:46 install.log

取消上一步设置的dir命令别名。

[root@localhost ~]# unalias dir

[root@localhost ~]# alias dir

-bash: alias: dir: not found

取消用户当前环境中已设置的所有命令别名。

[root@localhost ~]# unalias -a

[root@localhost ~]# alias       //将查不到任何别名信息

查看teacher用户的身份信息,并将输出结果保存到文件“idtch.txt”中。

[root@localhost ~]# id teacher > idtch.txt

[root@localhost ~]# cat idtch.txt

查看jerry用户的身份信息,并追加到文件“idtch.txt”中,不覆盖文件的原有内容。

[root@localhost ~]# id jerry >> idtch.txt

[root@localhost ~]# cat idtch.txt

在文件“pw.txt”中保存初始密码“123456”,并使用该文件为jerry用户设置密码。

[root@localhost ~]# vi pw.txt

123456

[root@localhost ~]# passwd --stdin jerry < pw.txt

尝试使用help命令查看ls命令的帮助信息时,由于ls并非内部命令,系统将会报错,通过“2>”操作符可以将报错信息重定向到指定的文件中。

[root@localhost ~]# help ls 2> err.log

[root@localhost ~]# cat err.log

使用ls命令查看“/etc/password”文件(并不存在)和“/etc/passwd”文件的属性时,输出结果将同时包含标准输出和错误输出。测试进行分别重定向、合并重定向的结果。

[root@localhost ~]# ls -l /etc/password /etc/passwd > std.txt 2> err.log

[root@localhost ~]# cat std.txt

-rw-r--r-- 1 root root 2135 10-17 23:21 /etc/passwd

[root@localhost ~]# cat err.log

ls: /etc/password: 没有那个文件或目录

[root@localhost ~]# ls -l /etc/password /etc/passwd &> out.log

[root@localhost ~]# cat out.log

ls: /etc/password: 没有那个文件或目录

-rw-r--r-- 1 root root 2135 10-17 23:21 /etc/passwd

过滤出“/etc/inittab”文件中不以“#”号开头的行,并再次过滤出非空行,将结果重定向保存为“inittab.txt”文件。

[root@localhost ~]# grep -v "^#" /etc/inittab | grep -v "^$" > inittab.txt

[root@localhost ~]# cat inittab.txt

找出系统中使用Bash作为登录shell、名称以“ha”开头的用户账号,并只显示出用户名、登录shell两个字段的内容。

[root@localhost ~]# grep "bash" /etc/passwd | grep "^ha" | cut -d ":" -f 1,7

查看当前系统的总内存空间、剩余可用内存空间(MB),去除其他无关信息。

[root@localhost ~]# free -m | head -2

total       used       free     shared    buffers     cached

Mem:          1010        467        542          0         32        381

[root@localhost ~]# free -m | grep "Mem" | awk '{print $2,$4}'

1010 542

用户自定义变量

1.定义新的变量

变量名=变量值

2.查看和引用变量的值

echo$变量名echo回显$调用变量

3.为变量赋值的常用方法

"双引号允许使用$来引用其他变量

'单引号:不允许引用其他变量,$或其他任何符号将作为普通字符看待、反撇号:允许执行特定命令的输出结果赋给变量

read命令:结合 –p 选项使用,告知用户应该输入的内容等相关事项

4.改变变量的作用范围

局部变量  对用户自定义的变量,默认情况下只能在shell环境中使用

全局变量export可以同时指定多个变量名作为参数,可以同时指定变量名并赋值

5.清除自定义变量

unset[变量名]

6.数值变量的运算

expr 变量1运算符变量2运算符[运算符变量3] ………….

+加法

-减法

\*乘法

/除法

%取余

环境变量

linux系统预先定义好的一类变量(配置文件 /etc/profile文件及用户宿主目录中的 .bash_profile)

set通过不带任何参数的set命令查看系统中所有的shell变量

$USER / $LOGNAME当前用户的登录名

$UID当前用户的UID号

$SHELL当前用户使用的shell

$HOME当前用户的宿主目录

$PWD当前用户的工作目录

$PATH当前用户的命令搜索路径

$PS1$PS2当前用户的主提示符和辅助提示符

位置变量

方便命令行给程序提供操作参数除第一个字段、命令或脚本名称以外,其余参数从左到右依次赋值给变量位置参数序号1——9

$0所执行的命令或脚本程序的名称

预定义变量是由Bash程序预先定义好的一些特殊变量

$#命令行中位置参数的数量

$*所有位置参数的内容

$?命令行执行后返回的状态,用于判断上一个命令是否正确,0正确

$$当前的进程号

$0当前的进程名

$!后台运行的最后一个进程的进程号

新建立一个名为“DAY”的变量,初始内容设置为“sunday”。

[root@localhost ~]# DAY=Sunday

查看变量DAY的内容,比较使用“$”符号与不使用“$”符号的区别。

[root@localhost ~]# echo DAY

[root@localhost ~]# echo $DAY在变量DAY的内容后紧跟“MorningBus”字符串并在一起显示。

[root@localhost ~]# echo $DAYMorningBus    //错误引用

[root@localhost ~]# echo ${DAY}MorningBus确认变量DAY的内容,并使用双引号为TODAY变量赋值‘Today is $DAY’。

[root@localhost ~]# echo $DAY

sunday

[root@localhost ~]# TODAY="Today is $DAY"

[root@localhost ~]# echo $TODAY确认变量DAY的内容,并使用单引号为TODAY变量赋值‘Today is $DAY’。

[root@localhost ~]# echo $DAY

sunday

[root@localhost ~]# TODAY='Today is $DAY'

[root@localhost ~]# echo $TODAY

Today is $DAY

统计当前登录到本地终端(tty1~tty6)中的用户数量,并将结果保存到变量UserNum中。

[root@localhost ~]# UserNum=`w | grep "tty" | wc -1`

[root@localhost ~]#echo $UserNum

用一行命令找出安装了fdisk程序的软件包名称(需要先确定fdisk程序的文件位置)。

[root@localhost ~]# rpm -qf `which fdisk`

util-linux-2.13-0.56.el5

通过find命令找出系统中hackli用户留下的文件或目录,并使用rm命令将其删除。

[root@localhost ~]# rm -rf `find /home -user hackli`

还是使用一行命令,将上一个例子的输出结果保存到变量FdiskPKG中。

[root@localhost ~]# FdiskPKG=$(rpm -qf $(which fdisk))

[root@localhost ~]# echo $FdiskPKG

util-linux-2.13-0.56.el5

从键盘输入一整行数据,赋值给变量HELO,并确认HELO变量的内容。

[root@localhost ~]# read HELO

good morning ,teacher!

[root@localhost ~]# echo $HELO

good morning ,teacher!

从键盘输入一整行数据,依次赋值给变量G1、G2,并确认G1、G2变量的内容。

[root@localhost ~]# read G1 G2

good morning,teacher!

[root@localhost ~]# echo $G1

good

[root@localhost ~]# echo $G2

morning,teacher!

从键盘读入一个数值变量,并给出相应的提示信息。

[root@localhost ~]# read -p "please input a number:" YourNum

please input a number:501

[root@localhost ~]# echo $YourNum

501

在当前shell环境中定义一个变量FILESVR,开启一个新的子shell进程(Bash或Zsh等),处于子shell环境中时将无法使用变量FILESVR的内容。

[root@localhost ~]# FILESVR=filesvr.benet.com

[root@localhost ~]# zsh

[root@localhost ~]# echo $FILESVR

[root@localhost ~]# exit

[root@localhost ~]# echo $FILESVR

filesvr.benet.com

确认变量FILESVR的内容,并将其设置为全局变量,在子shell、当前shell环境中进行验证。

[root@localhost ~]# echo $FILESVR

filesvr.benet.com

[root@localhost ~]# export FILESVR

[root@localhost ~]# zsh

[root@localhost ~]# echo $FILESVR    //在子shell环境中也可以使用该变量

filesvr.benet.com

[root@localhost ~]# exit

[root@localhost ~]# echo $FILESVR    //返回原shell环境中仍然能使用该变量

定义两个变量MONTH、YEAR,并将其设置为全局变量。

[root@localhost ~]# export MONTH=May YEAR=2009

[root@localhost ~]# echo $MONTH $YEAR

清除已设置的变量DAY、MONTH、YEAR。

[root@localhost ~]# unset DAY MONTH YEAR

[root@localhost ~]# ECHO $DAY $MONTH $YEAR

置变量X、Y的值分别为34、12,依次计算变量X、Y的加减乘除及取模运算结果。

[root@localhost ~]#  expr $X + $Y

46

[root@localhost ~]# expr $X - $Y

22

[root@localhost ~]# expr $X \* $Y

408

[root@localhost ~]# expr $X / $Y

2

[root@localhost ~]# expr $X % $Y

10

计算变量X的值与数值“123”的和,并将计算结果重新赋值给变量X。

[root@localhost ~]# echo $X

34

[root@localhost ~]# X=`expr $X + 123`

[root@localhost ~]# echo $X

157

分页查看系统环境中设置的shell变量。

[root@localhost ~]# set | less

以分号分隔,显示当前用户的用户名、宿主目录、登录shell。

[root@localhost ~]# echo "$USER:HOME:SHELL"

确认当前的命令搜索路径,并将“/opt/bin”目录添加到现有的搜索路径中去。

[root@localhost ~]# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@localhost ~]# PATH="/opt/bin:PATH"

[root@localhost ~]# echo $PATH

/opt/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

在当前用户环境中,将用于限制历史命令条数的环境变量HISTSIZE的值改为24.

[root@localhost ~]# history | wc -l

229

[root@localhost ~]# export HISTSIZE=24

[root@localhost ~]# echo $HISTSIZE24

[root@localhost ~]# history | wc -l

24

编辑“~/.bash_profile”文件,修改PATH的设置,以便用户在下次登录后能够使用“/opt/bin”目录作为默认搜索路径。

[root@localhost ~]# vi ~/.bash_profile

验证预定义变量$0、$$、$?的作用。

[root@localhost ~]# bash              //开启一个新的进程

[root@localhost ~]# echo $0 $$         //显示当前的进程名称、PID号

bash 2040

[root@localhost ~]# exitt              //执行一个错误命令

bash: exxit: command not found

[root@localhost ~]# echo $?           //返回值非0,表示上一条命令执行失败

127

[root@localhost ~]# exit

exit

[root@localhost ~]# echo $?           //返回值为0,表示上一条命令执行成功

0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值