Linux shell编程学习笔记(一)
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 是脚本后接的第二个参数
[email protected] 是传给脚本的所有参数列表,"$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
[[email protected] ~]# sh useraddwhile.sh
[[email protected] ~]# 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
[[email protected] ~]# sh hitkey.sh
请输入一个字符,并按Enter键确认:1
你输入的是数字 1
[[email protected] ~]# sh hitkey.sh
请输入一个字符,并按Enter键确认:w
你输入的是字母 w
[[email protected] ~]# sh hitkey.sh
请输入一个字符,并按Enter键确认:@
你输入的是非法字符 @
read用法:
read -p 参数1 参数2 表示将读取参数1的内容,并赋值给参数2(相当于定义了一个变量同时为其赋值)
read 还可以读取用户输入,如:read -p “请输入你的分数” a 表示提示并读取用户输入,并保存在变量a中
上一篇: php二维数组根据某个字段排序
下一篇: 项目总结(一)