Shell 编程总结

Shell 编程总结
变量
基本概念
Shell变量的名称与C语言一样,由数字、字母、下划线组成,其中只能以字母或下划线开头
变量可以为空值,null
赋值时,=两边没有空格
例如:

str=”abc”
a=1
变量的值如果含空格,赋值时用双引号括起来
str=”Hello World!”
一般通配符
星号(*)
功能:匹配任意字符的出现。
*file 匹配 .profile?
/etc目录下*.c文件的匹配模式:
/etc*.c ?
/etc/*.c? (√)
.和/必须显示匹配
问号(?)
功能:匹配任意一个字符。
方括号([ ])
功能:匹配括号内所限定的任何一个字符
如: f[abcd]匹配fa、fb、fc、fd
双引号”
功能:双引号括起来的字符作为普通字符对待;
$ 、 倒引号、反斜线 \ 这三个仍保留其特殊功能;
$表示变量替换,用预先指定的变量值代替$和变量
倒引号表示命令替换,
\反斜线在后面字符是$、、”、\、换行符之一时,表示转义字符,即不对后面字符特殊处理
算术运算:expr命令
功能
该命令提供算术运算功能,并能对数字或非数字字符串进行计算。
expr命令将参数作为表达式,计算该表达式并将结果显示在标准输出设备上。
例如:(注意运算符左右都有空格!)
expr 10 + 10
expr 20 / 5
expr $a + $b
字符*(乘)在shell中有特殊含义,因此他们的前面必须有转义字符“\”
如:expr 2 \* 5
当有变量参与运算时,需要在变量名前面加“$”
如:a=11
expr $a \% 2
表达式只能返回真或假 
条件表达式:
[ expression ] 这种更常用 表达式两端必须有空格
test expression
整数大小比较:
-eq 等于 [ $1 -eq $2 ] 参数1与参数2比较是否相等
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
逻辑关系:在linux 中 命令执行状态 0 为真,其他为假
逻辑与: && 
第一个条件为假时,第二条件不用再判断,最终结果已经有; 
第一个条件为真时,第二条件必须得判断; 
逻辑或: || 
第一个条件为真时,第二条件不用再判断,最终结果已经有; 
第一个条件为假时,第二条件必须得判断; 
逻辑非: !
还是对上一个例子加一下逻辑判断
1 #!/bin/bash
2 [ ! $# -eq 1 ] && echo "args are error" && exit 5
3 id $1 &>/dev/null && echo "User $1 exit." && exit 2
4 id $1 &>/dev/null || useradd $1
5 id $1 &>/dev/null && echo "$1" | passwd --stdin $1 &>/dev/null && echo "Add User $1 success!"
第二行 使用了条件判断 $# 特殊变量 获得参数个数 如果不为1 打印提示信息 并 退出;
第三行 id $1 查看用户名为$1的用户信息 结果放入null中,若用户存在返回状态为0,逻辑判断为真,由于是逻辑与判断,仍然会执行后面的命令,打印用户已存在的提示,并退出,此时可以看出通过运用逻辑与的执行特性,替代完成了if else的判断逻辑即:用户存在,给提示,并退出,不存在,继续执行。
第四行代码使用了逻辑或命令,用户不存在 返回状态码非0,逻辑判断为假,对于逻辑或,当第一个判断为假的时候,仍要执行第二个逻辑判断,所以,会执行后面的添加用户操作。
第五行 使用逻辑与命令,当用户存在的时候 设置密码 并打印提示信息,用户添加完成
接着上面的要求,添加完成之后计算系统一共有多个用户。
1 #!/bin/bash
2 [ ! $# -eq 1 ] && echo "args are error" && exit 5
3 id $1 &>/dev/null && echo "User $1 exit." && exit 2
4 id $1 &>/dev/null || useradd $1
5 id $1 &>/dev/null && echo "$1" | passwd --stdin $1 &>/dev/null && echo "Add User $1 success!"
6 COUNT=
wc -l /etc/passwd | awk ‘{print $1}’
7 echo "total Users are $COUNT"
第六行 定义一个变量 使用COUNT变量来定义用户总数,所有的命令要用反引号“括起来,使用awk切割字符串,得到用户数量 
第七行 打印用户数量
if判断
If 条件 ;then 
语句 
elif 条件 ; then 
语句 
else 
语句 
fi 
当then与if同行的时候 之间需要加分号;否则不需要加,最后结束条件判断要加fi 代表结束。
在if判断中的逻辑符号: 
-a 与判断 
-o 或判断
做如下例子,如果/etc/inittab文件的行数大于50,就显示好大的文件;
1 #!/bin/bash
2
3 C=
wc -l /etc/inittab | cut -d’ ’ -f1`
4 if [ $C -gt 50 ];then
5 echo “big file.”
6 else
7 echo “small file.”
8 fi
If…then…else控制结构
通过例题来对If…then…else 结构进行讲解
//参数个数为0时,输出“you must input at least one arg”;不为0时,输出“correct arg number.”

if [ $# -eq 0 ]
then
echo “you must input at least one arg”
else
echo “correct arg number”
Fi
if - then - elif结构
if [ condition_1 ]
then
commands_1
elif [ condition_2 ]
then
commands_2
else
commands_n
Fi
例题:输入的命令行第一个参数必须是hello时,程序结果显示”hello!how are you?”;否则,如果第一个参数为空,则显示” you must input parameters”;其他情况时,显示”The only accept parameter is hello”

if [ “ 1=hello]thenechohello!howareyou?elif[ 1” = “” ]
then
echo “you must input parameters”
else
echo “The only accept parameter is hello”
Fi
三大循环
While循环
例题:从一加到10求和
Echo count=1
while [ countlt10]doecho count
let count=count+1
done
echo “End!”
Until 循环
例题:从10加到一
result=0
num=10
until [ numeq0]do((result=result+num))((num=num1))doneechotheresultis result.”
For 循环
例题打印9*9 乘法表
For (( i=1; i<=9; i++ ))
Do
For(( j=1; j<=i; j++ ))
Do
Echo -n “ i j = (( i * j))DoneEchoDoneEchoend!i=1;until((i>9))doletj=1;until((j>i))dolettemp=ijechone i* j= temp\t”
let j++;
done
let i++;
echo “”
done
echo “end”

i=1;
while((i<=9))
do
j=1;
while((j<=i))
do
let “sum=i*j”
echo -ne “ i j=$sum\t”
let j++;
done
echo “”
let i++;
done
echo “end”
谢谢大家的观看。希望能帮助到大家。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值