设为首页 收藏本站
查看: 1453|回复: 6

shell的相关知识(变量、脚本定义)

[复制链接]

尚未签到

发表于 2013-3-7 11:20:14 | 显示全部楼层 |阅读模式
一、shell的相关知识:
1、对于shell编程语言大体分为:机器语言、汇编语言、高级语言
2、shell变量类型:事先确定数据的存储格式和长度
shell变量分为:字符型、数值型
数值型又分为:整型、浮点型(在shell中一般不使用浮点型数值进行操作)
3、shell:弱类型编程语言
强:变量在使用前,必须事先声明,甚至还需要初始化:
弱:变量用时声明:也不需要区分类型:
显式:明确要转换成什么类型:
隐式:不明确转换成什么类型,系统要看你进行什么操作,它会自动给字符转换成相应类型进行操作,例:11+c=?
默认shell中的变量不能进行运算 例:# C=$A+$B
4、变量赋值:VAR_NAME=VALUE
5、如何定义变量名称:
        a、只能包含字母、数字和下划线,并且不能数字开头;
        b、不应该跟系统中已有的环境变量重名;
        c、最好做到见名知义;
6、bash变量类型:
        a 、环境变量
        b、本地变量(局部变量)
        c、位置变量
        d、特殊变量
a、环境变量:作用域为当前shell进程及其子进程;
     格式:export varname=value   "导出"
b1、本地变量:作用域为整个bash进程;(随时用随时定义)
     格式:变量名=:
b1、局部变量:作用域为当前代码段;
     格式:local 变量名=值
c、位置变量:$1(第一个参数),$2(第二个参数),...
例:./filetest.sh  /etc/fstab  /etc/inittab
     第一个参数$1:/etc/fstab
     第二个参数$2:/etc/inittab
shift:轮替,每执行一个shift就会踢出一个; 格式:shift [n] 可以一下踢出多个
例:./filetest.sh /etc/fstab /etc/inittab /etc/passwd /tmp/config.sh
使用shift 2 就表示把/etc/fstab和/etc/inittab踢出去,而后/etc/passwd就变成了第一个
d、特殊变量:
          $?:上一个命令的执行状态返回值;
          $#:传送给shell程序的位置参数的数量(参数的个数)
          $*:调用shell程序时所传送的全部参数的单字符串,“参数1”“参数2”…形式保存的参数列表
          $@:“参数1”“参数2”...形式保存的参数列表

二、什么是脚本

脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的,通过记事本程序或其它文本编辑器创建、并被保存为特定文件扩展名(例如:对于VBScript脚本编程语言来说,脚本文件扩展名为.VBS)的普通文本文件。
#/bin/bash(对于脚本而言,第一行必须加上这句命令)
#:表示注释信息
显示脚本内容时一定要指定路径 例#./脚本名或#bash 脚本名

练习:写一个脚本
给脚本传递两个参数(整数)
显示此两者之和,之乘积;
#!/bin/bash
#
if [ $# -eq 2 ]; then
echo "the sum is: $[$1+$2]"
echo "the prod is: $[$1*@]"
else
echo "Usage:cacl.sh ARG1 ARG2"
fi

1、程序执行,可能有两类返回值;
           a、程序执行结果
           b、程序状态返回代码(0-255)
           0:正确执行
           1-255:错误执行,1,2,127(系统预留);
2、输出重定向:
>,>>,2>,2>>,&>如果命令返回的结果对我们没有什么用处,我们可以把它放在/dev/null(软件设备)

练习:写一个脚本,完成以下任务
1、添加5个用户,user1,....
2、每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息;
3、每个用户添加完成后,都要显示用户某某已经成功添加;
#!/bin/bash
useradd user1 | echo "user1 tianjia successfull"
echo "user1" | passwd --stdin user1 > /dev/null
useradd user2 | echo "user2 tianjia successfull"
echo "user2" | passwd --stdin user2 > /dev/null
useradd user3 | echo "user3 tianjia successfull"
echo "user3" | passwd --stdin user3 > /dev/null
useradd user4 | echo "user4 tianjia successfull"
echo "user4" | passwd --stdin user4 > /dev/null
useradd user5 | echo "user5 tianjia successfull"
echo "user5" | passwd --stdin user5 > /dev/null
或者#!/bin/bash
useradd user1
echo "user1" | passwd --stdin user1 &> /dev/null
echo "add user1 successfull."
useradd user2
echo "user2" | passwd --stdin user2 &> /dev/null
echo "add user2 successfull."
useradd user3
echo "user3" | passwd --stdin user3 &> /dev/null
echo "add user3 successfull."
useradd user4
echo "user4" | passwd --stdin user4 &> /dev/null
echo "add user4 successfull."
useradd user5
echo "user5" | passwd --stdin user5 &> /dev/null
echo "add user1 successfull."

3、撤销变量:(针对于任何变量)
unset VARNAME
4、脚本在执行时会启动一个子shell进程;
命令行中启动的脚本会继承当前shell环境变量;
系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;
引用变量:${变量名},括号有时可省略。
变量实际是内存空间,命名,变量用完之后要回收
5、条件判断:
比如:如果用户不存在
          添加用户,给密码并显示添加成功;
   否则
          显示如果已经没在,没有添加;
bash中如何实现条件判断?
条件测试类型:整数测试、字符测试、文件测试
条件测试的表达式:
          [expression]
          [[expression]]
          test test< /span>命令+表达式)
整数比较:
          -eq:测试两个整数是否相等;不等,为假,相等,为真;比如 $A -eq $B
          -ne:测试两个整数是否不等;不等,为真,相等,为假;比如 $A -ne $B
          -gt:测试一个数是否大于另一个数;大于,为真,否则,为假;比如 $A -gt $B
          -lt:测试一个数是否小于另一个数;小于,为真,否则,为假;比如 $A -lt $B
          -ge:大于或等于;比如 $A -ge $B
          -le:小于或等于;比如 $A -le $B
例:定义两个变量
INT1=63
INT2=77
[ $INT1 -eq $INT2 ]

[[ $INT1 -eq $INT2 ]]

test $INT1 -eq $INT2

文件测试:
          -e 文件 :表示测试文件是否存在
          -f 文件:测试文件是否为普通文件
          -d 文件:测试指定路径是否为目录
          -r 文件:测试当前用户对指定文件是否有读取权限
          -w 文件:测试当前用户对指定文件是否有写权限
          -x 文件:测试当前用户对指定文件是否有执行权限
比如:
[ -e /etc/inittab ]表示测试这个文件是否存在;
[ -x /etc/rc.d/rc.sysinit ]表示这个文件对当前用户是否有执行权限;
例:
FILE=/etc/inittab
if [ ! -e $FILE ]; then
echo "no file."
exit 8
fi

条件判断,控制结构:
a、单分支if语句
if 判断条件; then
   statement1
   statement2
   ...
fi

b、双分支的if 语句:
if 判断条件;then
  statement1
statement2
...
else
statement1
statement2
fi

练习:写一个脚本
给定一个用户,判断其UID与GID是否一样
如果一样,就显示此用户为“good guy”;否则,就显示此用户为“bad guy”。
#!/bin/bash
USERNAME=user1
USERID=`id -u $USERNAME`
GROUPID=`id -g $USERNAME`
if [ $USERID -eq $GROUPID ]; then
echo "Good guy"
else
echo "Bad guy"
fi
练习:写一个脚本
判定命令历史中历史命令的总条目是否大于1000;如果大于,则显示“Some command will gone." 否则就显示“OK".
#!/bin/bash
HISTORY1=`history | wc -l`
if [ $HISTORY1 -lt 1000 ] &> /dev/null; then
echo "Some command will gone."
else
echo "OK"
fi

c、多分支的if语句:
if 判断条件1; then
statement1
..
elif 判断条件2; then
statement2
...
elif 判断条件3; then
statement3
...
else
statement4
...
fi

练习:写一个脚本
给定一个文件:
如果是一个普通文件,就显示之;
如果是一个目录,以显示之;
否则,此为无法识别文件;
#!/bin/bash
#
FILE=/etc/rc.d/rc/sysinit
if [ ! -e $FILE ]; then
echo "NO such file."
exit 6
fi
if [ -f $FILE ]; then
echo "Common file."
elif [ -d $FILE ]; then
echo "Directory."
else
echo "Unknown."
fi

6、定义脚本退出状态码
exit:退出脚本
exit 数字(0表示正确,1-255表示错误)
如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码:
测试脚本是否有语法错误:
bash -n 脚本
bash -x 脚本:单步执行(可以清楚查看每步是否有语法错误)

练习:写一个脚本
给定一个文件,比如/etc/inittab
判断这个文件中是否有空白行;
如果有,则显示其空白行数;否则,显示没有空白行。
先判断文件是否存在,如果不存在就会显示'no /etc/inittab',否则就会进行下面的操作;
#!/bin/bash
FILE=/etc/inittab
if [ ! -e $FILE ]; then
echo "No $FILE."
exit 8
fi

if grep "^$" $FILE &> /dev/null; then
echo "Total blank lines: `grep "^$" $FILE | wc -l`."
else
echo "No blank line."
fi

练习:写一个脚本
给定一个用户,获取其密码警告期限;
而后判断用户密码使用期限是否已经小于警告期限;
提示:计算方法,最长使用期限减去已经使用的天数即为剩余使用期限;
如果小于,则显示“Warning";否则,就显示“OK".
#!/bin/bash
USERNAME=luo
long=`grep "\<$USERNAME" /etc/shadow | cut -d: -f5`
jing=`grep "\<$USERNAME" /etc/shadow | cut -d: -f6`
change=`grep "\<$USERNAME" /etc/shadow | cut -d: -f3`
a=`date +%s`
let v=$a/86400
let A=$v-$change
let B=$long-$A
if [ $B -gt $jing ]; then
echo "OK"
else
echo "Warning"
fi

7、在shell中如何进行算术运算:
a、let 算术运算表达式
比如: let C=$A+$B
b、$[算术运算表达式]
              C=$[$A+$B]
c、$((算术运算表达式))
              C=$(($A+$B))
d、expr 算术运算表达式,表达式中各操作及运算符之间要有空格,而且要使用命令引用
              C=`expr $A + $B`
8、命令的间逻辑关系:
     逻辑与:&&;
第一个条件为假时,第二条件不用再判断,最终结果已经有;
第一个条件为真时,第二条件必须得判断;
      逻辑或:||
例如:
a、如果用户user6不存在,就添加用户user6
! id user6 && useradd user6
或id user6 || useradd user6
b、如果用户存在,就显示用户已存在,否则,就添加此用户;
id user1 && echo "user1 exists." || useradd user1
c、如果用户不存在,就添加;否则,显示其已经存在;
! id user1 $$ useradd user1 || echo "user1 exists."
d、如果用户不存在,添加并且给密码;否则,显示其已经存在;
!id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists.“

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-3605-1-1.html 上篇帖子: shell函数显式的返回值 下篇帖子: Linux/Unix shell 自动发送AWR report

尚未签到

发表于 2013-3-18 22:46:57 | 显示全部楼层

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-17 10:10:10 | 显示全部楼层
长得真有创意,活得真有勇气!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

发表于 2013-5-20 16:56:47 | 显示全部楼层
此地禁止大小便,违者没收工具。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-24 16:23:46 | 显示全部楼层
吃饭与ml是第一生产力。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-31 10:06:00 | 显示全部楼层
生,容易。活,容易。生活,不容易。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-6-5 13:09:15 | 显示全部楼层
男人与女人,终究也只是欲望的动物吧!真的可以因为爱而结合吗?对不起,我也不知道。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表