Linux shell编程学习笔记(一)

て烟熏妆下的殇ゞ 提交于 2020-01-21 04:57:27

Linux shell编程笔记

一:脚本开头固定格式:

#!/bin/bash 申明这是一个shell脚本文件

二:脚本保存后缀为 .sh ;运行.sh的方式有两种:

   (1)./接文件名.sh的方式运行   (2)/bin/sh   ./文件名.sh
   区别:第一种直接以点斜杠运行的方式,有时候需要先赋予文件可执行权限,第二种方式则可以直接运行,不需要赋予执行权限

三:shell脚本

   (1)变量定义:直接A=123或者FILE=“D:/xuexi/” 即可
   (2)变量的引用:$A或者$FILE      注意$与变量名之间不能有空格;$不仅可以引用变量,也可以直接引用其他命令的执行结果,然后赋值给其他变量
   如:USER=$(cat /root/users.txt)

(3)系统常用的一些变量引用:

           $# 是传给脚本的参数个数
           $0 是脚本本身的文件名
           $1 是脚本后接的第一个参数
           $2 是脚本后接的第二个参数
           $@ 是传给脚本的所有参数列表,"$1" "$2" "$3" … "$n"
          $*  是以一个单字符串显示传给脚本的所有参数,"$1 $2 $3 … $n"
         $$ 是脚本运行的当前进程ID号
         $? 是最后运行命令的结束状态码,0表示没有错误,其他表示有错误

(4)Linux中没有单引号

表示字符或者字符串需要用双引号引起来;
注意单引号与反引号的区别:反引号是键盘上Esc键下的那个键,与单引号是不同的,命令可以放在反引号里执行,但是不能放在单引号里执行,放在单引号里就成了字符串

(5) if判断语句

格式:
if 条件判断1;then
条件判断1成立时执行的操作

elif 条件判断2;then
条件判断2成立时执行的操作

else
所有条件判断都不成立时执行的操作
fi

#!/bin/bash
read -p "请输入你的分数" a
if [ -z $a ];then
  echo "分数的有效范围是 0~100分!!!"
  exit
fi
  if [ $a -ge 0 ] && [ $a -le 59 ];then
    echo "安慰奖"
  elif [ $a -ge 60 ] && [ $a -le 70 ];then
    echo "三等奖 "
  elif [ $a -ge 71 ] && [ $a -le 80 ];then
    echo "二等奖 "
  elif [ $a -ge 81 ] && [ $a -le 90 ];then
    echo "一等奖 "
  elif [ $a -ge 91 ] && [ $a -le 100 ];then
    echo "特等奖 "
else
   echo "分数的有效范围是 0~100分!!!"
fi 

注意:
(1)有时候if后的判断条件需要用单/双圆括号或者单/双中括号 括起来
(2)if条件后接分号;再接then ,注意语句块间的缩进对齐
**linux中shell条件判断if中的-a到-z的意思可参考:https://blog.csdn.net/wwwyuanliang10000/article/details/53610326?locationNum=13&fps=1
[ -a FILE ] 如果 FILE 存在则为真
[ -d FILE ] 如果 FILE 存在且是一个目录则为真
[ -z STRING ] “STRING” 的长度为零则为真

(6)for循环

      for 变量名  in 变量值列表
      do
         循环体
      done
#!/bin/bash
num=0
for i in {1..254}
do
 if [ `expr $i % 2` -eq 0 ];then
  echo $i
     let num++
 fi
done
echo "1-254 之间的偶数 "$num" 个"

(7)while循环

      while 条件测试操作
      do
       命令序列
      done
#!/bin/bash
PREFIX="stu"
i=1
while
[ $i -le 10 ]
do
useradd ${PREFIX}$i
echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
let i++     #let的用法
done
[root@localhost ~]# sh useraddwhile.sh
[root@localhost ~]# tail /etc/passwd
stu1:x:1005:1005::/home/stu1:/bin/bash
stu2:x:1006:1006::/home/stu2:/bin/bash
stu3:x:1007:1007::/home/stu3:/bin/bash
stu4:x:1008:1008::/home/stu4:/bin/bash
stu5:x:1009:1009::/home/stu5:/bin/bash
stu6:x:1010:1010::/home/stu6:/bin/bash
stu7:x:1011:1011::/home/stu7:/bin/bash
stu8:x:1012:1012::/home/stu8:/bin/bash
stu9:x:1013:1013::/home/stu9:/bin/bash
stu10:x:1014:1014::/home/stu10:/bin/bash

循环体内部,通过语句“let i++”(等同于i=expr $i + 1)来是变量i的值增加1,一直循环,直到满足条件为止

(8)until循环 (直到型循环)

     until command
     do
        Statement(s) to be executed until command is true
     done
#!/bin/bash
declare -i i=10
declare -i sum=0
until ((i>10))
do
  let sum+=i
  let ++i
done
echo $sum

三种循环同样支持:break continue*

(9)case 分支

case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
……
* )
默认命令序列
esac
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "你输入的是字母 $KEY"
;;
[0-9])
echo "你输入的是数字 $KEY"
;;
*)
echo "你输入的是非法字符 $KEY"
esac
[root@localhost ~]# sh hitkey.sh
请输入一个字符,并按Enter键确认:1
你输入的是数字 1
[root@localhost ~]# sh hitkey.sh
请输入一个字符,并按Enter键确认:w
你输入的是字母 w
[root@localhost ~]# sh hitkey.sh
请输入一个字符,并按Enter键确认:@
你输入的是非法字符 @

read用法:

read -p 参数1 参数2 表示将读取参数1的内容,并赋值给参数2(相当于定义了一个变量同时为其赋值)
read 还可以读取用户输入,如:read -p “请输入你的分数” a 表示提示并读取用户输入,并保存在变量a中

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!