linux 学习基础7之脚本的练习

练习:

传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将结果显示出来。

写一个脚本:

#!/bin/bash

USER=$1

if [ !  $# -eq 1 ];then

echo "please input only one username "

exit 2

fi

if ! id $1 &> 1117.www.qixoo.qixoo.com/dev/null;then

echo "the user is not exist"

exit 3

fi

if [ `id -u $1` -eq `id -g $1` ];then

echo "same"

else

echo "different"

fi

判断当前主机的CPU生产商,其信息在qkxue.net/proc/cpuinfo文件中vendor id一行中。

如果其生产商为AuthenticAMD,就显示其为AMD公司;

如果其生产商为GenuineIntel,就显示其为Intel公司;

否则,就说其为非主流公司;

#!/bin/bash

CPUFAC=`sed -n ‘/^vendor_id/p‘ /proc/cpuinfo | cut -d‘ ‘ -f2`

if [ $CPUFAC == AuthenticAMD ];then

echo "AMD"

elif

[ $CPUFAC == GenuineIntel ];then

echo "Inter"

else

echo"other company"

fi

写一个脚本:

给脚本传递三个整数,判断其中的最大数和最小数,并显示出来。

#!/bin/bash

declare MAXNUM

declare MINNUM

if [ $# -ne 3 ];then

echo "please input three number"

exit 2

fi

if [ $1 -ge $2 ];then

MAXNUM=$1

MINNUM=$2

else

MAXNUM=$2

MINNUM=$1

fi

if [ $MAXNUM -ge $3 ];then

echo "the maxnum is $MAXNUM"

[ $1 -ge $2 ] && echo "is first number" || echo "is second number"

else

MAXNUM=$3

echo "the maxnum is $MAXNUM is third number"

fi

if [ $MINNUM -le $3 ];then

[ $1 -le $2 ]&& echo "the minnum is $1" || echo "the minnum is $2 "

[ $1 -le $2 ]&& echo "the minnum is first" || echo "the minnum is second"

else

echo "the minnum is $3 is third number "

fi

测试字符串

1 [ $A == $B ] 此时的==前后都要接空白符 不然默认会识别成赋值,

2 [ $A != $B ]

3测试字符串是否为空的单目运算符

-n  string 空为真,不为空为真  为空时为假 且测试时 [空格变量空格] 这样的格式进行测试

4测试字符串不为空

-s  不为空为真 ,空为假

4测试字符串是否大于 小于 > < 来表示

for 循环的使用

for 变量 in 列表 ;do

命令行1;

命令行2;

done

1.1生成列表

1.1{1..100}

1.2 seq 起始数 步长 结束数

seq  number  表示从1开始到number

seq number1 number2 表示步长为1 起始数为number1 结束数为number2

seq number1 number2 number3 1表示起始数 2表示步长 3表示结束数

1.3 ` ls  /etc/`

数据类型的申明 declare

declare -i SUM=0  申明为整数!

declare -x 表示申明为环境变量

写一个脚本:

1、设定变量FILE的值为/etc/passwd

2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如:

Hello, root, your shell: /bin/bash

3、统计一共有多少个用户

4、只向默认shell为bash的用户问声好

# cat /etc/passwd | cut -d: -f1,7 | head -1 | tail -1 | cut -d: -f2 | sed ‘[email protected]/.*/@@‘

# cat /etc/passwd | cut -d: -f1,7 | head -1 | tail -1 | cut -d: -f1

#!/bin/bash

declare I

declare J=0

NUM=`cat /etc/passwd | wc -l `

for  I in `seq $NUM` ;do

USER=`cat /etc/passwd | cut -d: -f1,7 | head -$I | tail -1 | cut -d: -f1`

USHELL=`cat /etc/passwd | cut -d: -f1,7 | head -$I | tail -1 | cut -d: -f2 | sed ‘[email protected]/.*/@@‘`

# echo "HI $USER your shell is $USHELL"

if [ $USHELL == bash ];then

echo "hi $USER your shell is $USHELL"

let J=$J+1

fi

done

echo "the users total is $I the bash is $J"

exit

写一个脚本:

1、添加10个用户user1到user10,密码同用户名;但要求只有用户不存在的情况下才能添加;

扩展:

接受一个参数:

add: 添加用户user1..user10

del: 删除用户user1..user10

其它:退出

adminusers user1,user2,user3,hello,hi

!/bin/bash

if [ $1 == "add" ];then

for I in {1..10};do

if  id user$I &> /dev/null;then

echo "user$I is exist"

else

useradd user$I

echo "user$1" | passwd --stdin user$I &> /dev/null

fi

done

elif [ $1 == "del" ];then

for I in {1..10};do

userdel -r user$I

done

else

echo "please input add or del "

exit 2;

fi

写一个脚本,分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数。显示结果形如:

BASH,3users,they are:

root,redhat,gentoo

NOLOGIN, 2users, they are:

bin,ftp

#!/bin/bash

#

NUMBASH=`grep "bash$" /etc/passwd | wc -l`

BASHUSERS=`grep "bash$" /etc/passwd | cut -d: -f1`

BASHUSERS=`echo $BASHUSERS | sed ‘[email protected][[:space:]]@,@g‘`

echo "BASH, $NUMBASH users, they are:"

echo "$BASHUSERS

组合测试条件

-a: 与关系

-o: 或关系

!: 非关系

if [ $# -gt 1 -a $# -le 3 ]

if [ $# -gt 1 ] && [ $# -le 3 ]

时间: 2024-12-11 04:37:06

linux 学习基础7之脚本的练习的相关文章

新手必看,Linux学习基础

Linux学习基础 1.什么是Linux? 准确的说,是指Linux的kernel(系统的核心程序),其内核版权属于Linus Torvalds,在GPL(GNU General Public License)版权协议下发行, 任何人都可以自由的复制(copy), 修改(change), 套装分发(distribute),销售,但是不可以在分发时加入任何限制, 而且所有原码必须是公开的,所以任何人都可以无偿取得所有执行文件和原代码. 对于Linux用户和系统管理员来说,Linux是指包含Linu

linux学习之路之脚本编程知识点

脚本编程知识点 1.获取变量中字符的长度 ${#VARNAME} 2.变量赋值 ${parameter:-word}:如果parameter为空或者未定义,则整个表达式为word:否则表达式值为parameter ${parameter:+word}:如果parameter为空或者未定义,则整个表达式为空:如果parameter有值,则整个表达式为word ${parameter:=word}:如果parameter为空或者未定义,则整个表达式值为parameter:否则整个表达式值为word

Linux学习——基础篇

学习Linux之前,需要首先了解计算机的基础知识.1.二进制.十进制相互转换.156转换为二进制的方法:逐一减去2的次幂方法.(需要自己提前记住:`27=128:26=64;25=32;24=16;23=8;22=4;21=2;2`0=1 )``` 156-128是否够减,如果够,则二进制数值为:128+....156-128剩余28,28-32不够,28-16够减,剩余12.则二进制数为:128+16+...12可以拆分为:8+4那么156转换为二进制数为:128+16+8+4.二进制为2`7

linux 学习基础1

一 linux基础知识 1.1 ls 显示当前目录或者文件 ls -l 查看文件的详细信息 ls -ld 查看目录的详细信息 -rw-r--r--.  1 root root    969 2月  22 2013 yum.conf 第一个字段:文件类型 :linux中文件的类型有如下几类 1 - 二进制文件 d 目录 c 字符设备文件 b块设备文件(block),p (pipe)管道文件,s (scoket)套接字文件,l 链接文件. 第二字符 rw-r--r-- 9个字符每三个一组表示 所有者

linux学习基础篇01--硬件基础

最近看马哥的linux运维视频,虽然我是我做软件测试的,但是最近也对运维方面的东西很感兴趣,因为以前总是写写测试框架代码,谢谢自动化测试代码.发现自己懂得东西很少.我的目标是成为一个测试架构师,可是只是会写写代码的话,永远也达不到这个目标.测试架构师需要在各个计算机领域都有一定深度的了解.所以前一段时间学习mysql调优后,现在开始看马哥的linux视频.学习一下运维的知识.这里有一个很诧异的地方就是,运维需要会的东西是很多的,而且要很深.为什么国内运维人员的工资缺普遍还不如我们测试呢.这是个问

linux学习-将seafile启动脚本设置为开机启动服务

有时候,我们安装的linux软件和程序不是通过yum安装,而是通过编译或者其他方式安装.有时需要将程序设置为服务,达到开机启动的目的. 我在公有云的与服务器上搭建了seafile网盘,当我重启云服务器的时候,seafile的程序不会自动启动,需要我在相关目录下执行脚本,才能启动. 将两个脚本使用软连接到/root/目录下,方便执行 现在采用服务的方式,将这这两个脚本加入开机启动 创建 systemd 服务文件 /etc/systemd/system/seafile.service vim /et

Linux学习基础知识

1.Linux如何分盘? 1.Linux对硬盘类型分的比较细.如果硬盘是IDE硬盘,那么它使用/dev/hdxy x表示第几块硬盘(从小写的a开始):y表示这个磁盘的第几个分区. dev/hdb2,其含义是第二个磁盘的第二个分区. 如果硬盘是SCSI硬盘,那么分区就表示为/dev/sdxy,其含义与IDE硬盘相同. 2.分区和挂载点? 在windows中,要访问一个分区直接访问代表该分区即可,但是在Linux分区 不可以通过/dev/hdxy或/dev/sdxy的方式访问分区,必须通过挂载点的名

Linux学习——————基础篇

一.linux试用 1.使用man或者info查询 2.超级简单的文本编辑器:nano 3.sync:数据同步写入磁盘,将内存中的数据写入磁盘 3.惯用的关机命令:shutdown /sbin/shutdown[-t秒] [-arkhncfF] 时间[警告信息]    普通用户shutdown需要root权限 二.文件权限 以root身份登录linux,执行ls -al 会出现一大堆东西 第一列代表文件的类型与权限 第一个字符代表这个文件是目录,文件或者链接文件 d为目录 -为文件 l链接文件

Linux 学习基础命令——9.24

第一节课:Linux的基本命令用法与man手册的使用 1:ls 列出文件列表 -a列出所有的目录(包含隐藏文件) -d列出目录本身,而不列出目录内的数据 例:ls -ld /home -h列出文件的容量 例:[[email protected] /]# ls -hld /etc/                drwxr-xr-x. 135 root root 8.0K Sep 27 07:23 /etc/ 单纯的使用ls -h [[email protected] /]# ls -h