SHELL

chsh -l  查看shell

切换

1.临时   直接执行   /bin/sh

2.永久   chsh

bash  特点、
1.交互式

2.命令的历史功能 history !+指令编号

3.命令的补齐  TAB

4.通配符  *任意字符   ?匹配一个字符 【!1-9】

5.前台后台切换  fg  bg 
ps -aux 查看进程
jobs 查看正在进行或暂停任务
bg 1 将一个任务切换到后台运行
fg 1 将任务切换到前台运行

6.特殊字符   若引用 “”  强引用   ''     命令取代 ``

7.输入输出重定向

0 标准输入

1  标准输出

2  变准出错

&> 所有的输出  = 2>&1

find / -size +10M 2>1.txt 将出错的输入到1.txt中
mail root -s ok1 0< 1.txt 正确的输入到1.txt并以邮件形式发送出去
8.命令别名

环境变量

set

1.本地变量 
2.环境变量

3. 特殊变量
a  位置变量   $1 $2  $0显示shell名

b  状态变量

环境文件

系统 /etc/profile   /etc/bashrc

个人  ~/.bash_profile   ~/bashrc

umask  权限掩码
022
最高权限-umask=实际权限

文件文件最高权限 666

目录最高权限 777

umask 022 修改权限为022
vim /etc/bashrc 编辑权限设置

alias=`find / -size +10m` 执行alias这自动收索大于10M的文件
alias find10=`find / -size +10M` 执行find10这自动收索大于10M的文件

算数运算

let
A=let 1+2 对1+2进行求和
 
$【】
A=$[1+2] 对1+2进行求和

$(())
A=$((1+3)) 对1+3进行求和

bc
echo "scale=2;5/2" |bc 求5/2的值

判断

test  expression
test 1 -gt 2
echo $? 判断1是否大于2

【 表达式 】
【 1 -gt 2】
  echo $?  判断1是否大于2


数字比较

大于   -gt

大于等于 -ge

小于   -lt

小于等于  -le

等于  -eq

不等于  ! -eq

字符串比较

大于 >  (一对【】带转义符    两队【】  不加转义符)
A=hello ,b=hellol
[ $A \> $B ] [[ $A > $B ]]  判断A是否大于B

小于 <    (一对【】带转义符    两队【】  不加转义符)

等于 =     ==  (等号两边有空格)
[ $A = $B ]

对象

-f  文件
[ -f f1 ]
echo $?   判断f1是否为一个文件

-e 存在

-d  目录

-L 连接

-r  读取

-x  执行

与  -a (两个判断式) 或  -o 
[ -e f1 -a -r f1 ] 判断f1是存在与可读取

短路操作符

&&  与(两个语句)   ||

grep "^user1\>" /etc/passwd && echo "the account is exist " ||echo "the account is not exist"
在/etc/passwd下收索user1,如果存在显示the account is exist否则显示the account is not exist
grep "^user1\>" /etc/passwd  &>/dev/null && echo "the account is exist " ||echo "the account is not exist"
在/etc/passwd下收索user1,如果存在显示the account is exist否则显示the account is not exist,并将收索结果放置/dev/null中

用脚本实现
vim 1.sh

#!/bin/bash
read -p "please input one account:" ACCOUNT
grep "^$ACCOUNT\>" /etc/passwd &>/dev/null && echo "the $ACCOUNT is ok " ||echo "not ok "

echo -e "\t\033[31m123\033[0m\n"  将123用红色表示


控制语句

选择
1。单选

 if  【】;then
 .....

 fi

#!/bin/bash
read -p "please input one account:" ACCOUNT
if  grep "^$ACCOUNT\>" /etc/passwd &>/dev/null;then
 echo "the $ACCOUNT is ok "
fi

2.双选

 if  [];then
  ..

 else
 ..
fi

#!/bin/bash
read -p "please input one account:" ACCOUNT
if  grep "^$ACCOUNT\>" /etc/passwd &>/dev/null;then
 echo "the $ACCOUNT is ok "
else
echo “the $ACCOUNT is  not ok”
fi

3.多选

if  【】;then
......

elif  【】;then
......

elif  【】;then
......

fi

判断一个文件是否存在,并判断它的类型
#!/bin/bash
read -p "please input one file:" FILE
read -p "please input one dir:" DIR
if [ -e $DIR/$FILE ];then

if [ -f $DIR/$FILE ];then
echo "the $DIR/$FILE is a file"
elif [ -d $DIR/$FILE ];then
echo "the $DIR/$FILE is a dir"
elif [ -L $DIR/$FILE ];then
echo "the $DIR/$FILE is a link"
fi
else
echo "the $DIR/$FILE is not ok"
fi

3.case语句

case  变量  in

变量值1)
.......;;

变量值2)

......;;

变量值3)


....;;

*)

....;;

esac

shell 脚本实现判断文件类型
#!/bin/bash
read -p "please input one file:" FILE
read -p "please input one dir:" DIR
if [ -e $DIR/$FILE ];then
STRING=`/bin/ls -l -d $DIR/$FILE`
FIRSTCHAR=`echo $(STRING:0:1)`
case $FIRSTCHAR in
-)
echo "the $DIR/$FILE is file";;
d)
echo "the $DIR/$FILE is dir";;
l)
echo "the $DIR/$FILE is link";;
b)
echo "the $DIR/$FILE is block device";;
c)
echo "the $DIR/$FILE is char device";;
*)
exit
else
echo "the $DIR?$FILE is not exist"
exit
esac
fi

脚本运行的时候 ,提示输入帐号,判断该帐号是否存在 ,如果存在 显示该用户的shell  以及改用的家目录,以及该用户密码是否设置
#!/bin/bash
read -p "please input one account:" ACCOUNT
if grep "^$ACCOUNT\>" /etc/passwd &>/dev/null;then
HOMEDIR1=`grep "^$ACCOUNT\>" /etc/passwd |cut -d: -f6`
shell1=`grep "^$ACCOUNT\>" /etc/passwd |cut -d: -f7`
echo "the user $ACCOUNT is exist"
echo "the user home is $HOMEDIR1"
echo "the user shell is $shell1"
/usr/bin/passwd -S $ACCOUNT &>/tmp/state
if grep -i "lock" /tmp/state &>/dev/null;then
echo "passwd is lock"
elif grep -i "empty" /tmp/state &>/dev/null;then
echo "passwd is empty"
elif grep -i "md5" /tmp/state &>/dev/null;then
echo "passwd is encry"
fi
else
echo "the user $ACCOUNT is not exist"
fi

 
循环

for  变量   in  变量值;do
........
done

1到100求和
#!/bin/bash
I=1
SUM=0
for I in {1..100};do
let SUM=$SUM+$I
done
echo $SUM

1到100内偶数求和
#!/bin/bash
I=1
SUM=0
for I in {1..100};do
if [$[ $I%2 ] = 0 ];then
let SUM=$SUM+$I
done
echo $SUM

1到100内奇数求和
#!/bin/bash
I=1
SUM=0
for I in {1..100};do
if [$[ $I%2 ] != 0 ];then
let SUM=$SUM+$I
done
echo $SUM

while  [条件];do

done

#!/bin/bash
I=1
SUM=0
while [ $I -le 100 ];do
let SUM=$SUM+$I
let I=$I+1
done
echo $SUM

while  read  LINE;do

done <文件名

查看一个文件内容在每个目录前显示行号
#!/bin/bash
let I=1
while read LINE;do
echo  -e "$I:\t" $LINE
let  I=$I+1
done </etc/passwd

显一个文件内容并判断文件类型
#!/bin/bash
read -p "please input one directory:" DIR
/bin/ls $DIR &>/tmp/file
while read LINE;do

if [ -f $dir/$LINE ];then
echo -e "$LINE\t" "the $DIR/$LINE is a file"
elif [ -d $DIR/$LINE ];then
echo -e "$LINE\t"  "the $DIR/$LINE is a dir"
elif [ -L $DIR/$LINE ];then
echo -e "$LINE\t"  "the $DIR/$LINE is a link"
done </tmp/file

until [条件];do

done

#!/bin/bash
#!/bin/bash
I=1
SUM=0
until [ $I -ge 100 ];do
let SUM=$SUM+$I
let I=$I+1
done
echo $SUM

作业  挑选  普通帐号  ,没账号的前面加上序号

#!/bin/bash
I=1
while read LINE;do
USERID=`echo $LINE |cut -d: -f3`
ACCOUNTNAME=`echo $LINE |cut -d: -f1`
if [ $USERID -ge 500 ];then
 echo -e  "\033[31m$I\t$ACCOUNTNAME\t$USERID\033[0m"
 let I=$I+1
 fi
done </etc/passwd

判断一个网络某个用户是否存在

#!/bin/bash
for I in {1..254};do
if ping -c 1 -W 1 192.168.101.$I &>/dev/null;then
echo "the host 192.168.101.$I is exist"
else
echo "the host 192.168.101.$I is not exist"
fi
done

cut /etc/passwd -d: -f3 |sort -n |tail -2 |head -1 查看当前用户最大uid

不用useradd创建一个用户并以脚本的方式实现
#!/bin/bash
read -p "please input one user:" ACCOUNT
if grep "^$ACCOUNT\>" /etc/passwd &>/dev/null;then
exit
else
MAXID=`cut -d:-f3 /etc/passwd |sort -n |tail -2 |head -1`
echo "$ACCOUNT:x:$[ $MAXID+1 ]:$[ $MAXID+1]::/home/$ACCOUNT:/bin/bash" >>/etc/passwd
echo "$ACCOUNT::::::::">>/etc/shadow
echo “$ACCOUNT:x:$[ $MAXID+1 ]:" >>/etc/group
mkdir /home/$ACCOUNT
cp /etc/skel/.*  /home/$ACCOUNT &>/dev/null
chown -R $ACCOUNT.$ACCOUNT /home/$ACCOUNT
touch /var/spool/mail/$ACCOUNT
chmod 660 /var/spool/mail/$ACCOUNT
chown $ACCOUNT.mail /var/spool/mail/$ACCOUNT
echo "123" |passwd --stdin $ACCOUNT
fi

转载于:https://blog.51cto.com/4459021/788864

linux 下的shell脚本相关推荐

  1. Linux下的shell脚本实战之用户创建

    Linux下的shell脚本实战之用户创建 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 1.该脚本提示用户创建用户名和密码 2.判断输入的用户名是 ...

  2. linux下执行shell脚本文件,Linux下使用shell脚本自动执行脚本文件

    搜索热词 以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 #将tomcat中 ...

  3. linux下的shell脚本

    linux下的shell脚本 一.Shell概述 二.Shell 解析器 三.Shell脚本入门 1. 脚本格式 2. 第一个Shell脚本:helloworld 3. 第二个Shell脚本:多命令处 ...

  4. linux实现学生信息管理系统,Linux下基于shell脚本实现学生信息管理系统

    LINUX Linux操作系统 Linux下基于shell脚本实现学生信息管理系统 #该管理系统是参考两位博主(时间有点远了,我忘了,请博主看到后联系我)后自行修改添加的.登录过程还有很多不完善,我就 ...

  5. linux下的shell脚本,linux下的shell脚本的使用

    什么是shell? Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户.这种对话方式可是交互 ...

  6. linux下的shell脚本,linux下shell脚本的学习

    一:shell脚本须以#!/bin/sh开始,指定了命令的解释器 #!/bin/sh  //指定解释器 sudo mv /home/pi/Desktop/installationPackage/bac ...

  7. linux下的shell脚本(基本)

    2019独角兽企业重金招聘Python工程师标准>>> Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有: bash:是Linux标准默认的shell ...

  8. Linux下使用 shell 脚本实现ftp文件下载

    最近从单片机转岗Linux,上级叫我熟悉下shell脚本,用shell脚本获取ftp上的文件,本节先介绍下载文件.单个下载文件脚本实现如下: 运行环境:WSL ####### ftp服务器上下载/ho ...

  9. Linux下通过Shell脚本快速进入指定目录

    现在有一个现实的场景: 每一次打开Linux,都是在 目录下: 我最近想练习网络的代码,所以创建了一个目录,路径为: 可以看到,这个路径很长,如果没一次都通过cd /home/admin/linex/ ...

  10. linux中调试脚本,在Linux下调试 Shell 脚本

    在大多数编程语言中都有调试工具可用于调试. 调试工具可以运行需要调试的程序或脚本,使我们可以在运行时检查脚本或程序的内部执行过程. 在shell脚本中我们没有任何调试工具,只能借助命令行选项(-n,- ...

最新文章

  1. sys.check_constraints
  2. Forefront Security For Exchange的反病毒测试
  3. 转: 如何从keystore file中查看数字证书信息
  4. 高斯判别分析(GDA)和朴素贝叶斯(NB)
  5. 牛客网-剑指offer 第二题(字符替换)
  6. url.getinputsteam 获取不完整_年度营销方案合集,活动策划,规划推广,全内容完整套用告别加班...
  7. 【转】ITK和VTK比较
  8. din算法 代码_DIN算法代码详细解读
  9. 字符串转换成json的三种方式
  10. 辩论界人机大战:IBM 人工智能和人类辩手几乎平手
  11. 无人车研发实力哪家强?Google只能排第十
  12. OpenCV-高斯低通高通滤波器(C++)
  13. 【174个】最全DICOM资料汇总[截止10.10.20][中国数字医疗论坛]
  14. 计算机硬盘存绝密,教您创建自己的绝密磁盘
  15. 用Dynamips和虚拟机搭建虚拟网络1
  16. 阿里云物联网平台使用笔记(一)——利用云产品流转关联两个设备的数据
  17. 会议OA项目---我的审批(审批会议签字)
  18. 2015InfoQ软件大会技术记录
  19. Debian7安装无线网卡
  20. 给全栈人员,如何用ps让图片不改变尺寸分辨率大小的情况下,让图片质量变的更小

热门文章

  1. 更改Windows默认收藏夹路径我有三法
  2. instance of 泛型
  3. Java 将字符串转换为字符数组 toCharArray()
  4. [Java]Thinking in Java 练习2.2
  5. lodash源码分析之Hash缓存
  6. jQuery全选反选实例
  7. 手机号码、获得当前时间,下拉框,填写限制
  8. Java基础知识强化之集合框架笔记56:Map集合之HashMap集合(HashMapString,Student)的案例...
  9. 天气预报API使用心得
  10. 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)