shell编程基础【一】

shell是一个命令解释器,侦听用户指令,启动这些指令进程,并将结果返回。(交互式shell)

同时shell也是一种程序设计语言,它有变量\关键字,各种流程控制语句。有自己的语法结构。

shell也有很多种,最常见的是bash,它是rhel默认的shell

查看shell信息

cat /etc/shells

echo $SHELL--查看当前shell

bash --version--查看当前shell版本

 

修改用户shell

1.vim /etc/passwd 最后一个字段

2.chsh -s /bin/ksh tan2

 

bash初始化

用户登录时,要执行几个文件

/etc/profile

~/.bash_profile

/etc/bashrc

~/.bashrc

~/.bash_logout

 

工作时:

~/.bash_history命令历史

与.bash_history相关的设置在/etc/profile中

命令历史调用:

!!执行前一个命令

!n执行编号为n的命令

!-n倒数第n个历史命令

!cmd 执行最近以cmd开头的命令

esc + .上次命令的最后参数

禁用命令历史

1.将/etc/profile中的HISTSIZE=0

2.删除.bash_history 再创建一个同名的指向/dev/null的软链接

bash中同时执行多条命令

1.有条件执行

命令用&&或||

&&前一个执行成功,才执行后一个

||前一个执行不成功,才执行后一个

2.无条件执行

命令依次写,用分号隔开.

 

3.在子shell中执行,(),执行完之后再退出来,将结果返回主shell

(cd /etc/X11;ls)

命令执行的返回值

Linux每个进程执行完退出后,都会给父进程一点信息,叫返回状态,

范围一般为0~255的整数

0表示成功无错误,其他的表示各种各样的问题

查看返回值状态:$?

 

()可以改变执行顺序

 

命令行的替换

{}字符展开

touch hello{1,2,3}.c

$变量替代(取变量值)

${}变量替代(取变量值),安全取变量

$ (())数学运算

echo $((3*5))

``或$()命令替换(取命令执行的结果)

mkdir `echo root`

先执行echo root

再执行mkdir root

或者 mkdir  $(echo $USER)

 

创建Shell步骤

1.创建一个脚本文件(第一行 #!/bin/bash)

2.设置其可执行权限

3.执行

 

如果没有执行权限可以:

bash 文件名

source 文件名

 

shell调试

bash [option] 文件名

bash -x /test 显示过程,显示参数,变量值

-n检查语法

 

1.输入密码,再回显

read 读数据,再将数据保存在变量中

格式:read [option] varname

-p提示

-s输入时不显示

-t n设置超时,如果几秒内不输入,就自动跳过

  1 #!/bin/bash

  2 

  3 read -s -p "Enter your password: " password

  4 echo "\n"

  5 echo "your password is: "

  6 echo $password

 

 

2.从键盘输入两个数,显示其中较大的那个:

if条件判断

格式:

if [ 条件 ]; then

commands

fi

-----------------------------------

if [ 条件 ]

then

commands

fi

 

条件判断:

数值

-gt大于

-ge大于等于

-lt小于

-le小于等于

-eq等于

-ne不等于

 

  4 read -p "input a " a

  5 read -p "input b " b

  6 read -p "input c " c

  7 

  8 if [ $a -le $b ];then

  9         a=$b

 10 fi

 11 if [ $a -le $c ];then

 12         a=$c

 13 fi

 14 echo $a

 15 

 

3.从键盘输入用户名,输完之后显示 hello,xx,如果5秒还没输入,就显示hello 当前用户名

 

 

if [ 条件 ]; then

commands

else

commands

fi

 

 

----------------------------------------------------------------

4.输入一个IP,判断这个主机是否能够ping通,并给出提示

 

  4 read -p "input the IP : " ip

  5 

  6 echo

  7 if ping -c 1 $ip > /dev/null

  8 then

  9         echo "ok"

 10 else

 11         echo "not"

 12 fi

 13 echo

 14 

---------------------------------------------------------------

 

Shell变量

shell变量分为:局部变量和环境变量

环境变量中又有:

普通环境变量

位置参数

特定变量参数

 

局部变量:只存在于创建它的shell中,不能被子shell继承

环境变量:能被子shell继承

 

 

export B="abc" 定义为环境变量

C="abc"缺省为局部变量

 

 

查看变量

set查看所有变量

env查看环境变量

 

环境变量中系统内置的变量

$?命令执行的退出状态

$$当前shellID

$PPID父进程ID

$!最新的后台进程

$0当前执行程序的名字

$1第一个参数

$2~$10第二个到第十个参数

$#参数的个数

$*位置参数的内容

 

-----------------------------------------

./t5.sh 10.1.1.1

这样的形式

 

 

  3 if [ $# -ne 1 ]

  4 then

  5 echo "Wrong!! Usage [./t5.sh][10.1.1.1]" 

  6 exit

  7 fi

  8 

  9 echo $1

 10 if ping -c 1 $1 > /dev/null

 11 then

 12 echo "Yeeeeeeeeeh!"

 13 else

 14 echo "Noooooooooo!"

 15 fi

 16 

 

------------------------------------------------

 

变量定义:

varname=values

变量名由字母、数字、下划线,但不能以数字开头

.不能出现在变量中,一旦出现立刻结束

变量区分大小写

赋值

1.赋值时=两边不能有空格

2.如果变量其值含有空格,要用引号括起来

 

 

变量运算

字符运算:

字符连接:无符号连接

计算长度:${#varname}

取子串:${varname:+/-n:n}

+/-就是字符串的左右多少个,后面n代表取几个

 

-----------------------------------------------------------------------

 

条件测试:

字符:

= 等于

!=不等于

\>大于

\<小于

-z长度是否为0(即判断字符是否为空)

-n长度是否不为0(即判断字符是否不为空)

 

为两个变量赋值(交互式输入read,输入内容为字符),显示其值比较大的

 

  3 read -p "input str1 " str1

  4 read -p "input str2 " str2

  5 

  6 if [ $str1 \> $str2 ]

  7 then

  8 echo "********************"

  9 echo $str1

 10 else

 11 echo "********************"

 12 echo $str2

 13 fi

 

 

 

------------------------------------------------------------------

 

文件:

-b filename判断是否为块设备

-c filename判断是否为字符设备

-d filename 判断是否为目录

-e filename判断文件是否存在

-f filename 判断是否为普通文件

 

任意输入一个文件名(含路径),判断是否存在并给出相应提示,如果不存在就创建它,并提示创建了该文件

 

read -p "input a file name(include path) :" filename

 

if [ -e $filename ]

then

echo

echo $filename "exist!"

exit 1

 

else

echo $filename "has been created !"

exec mkdir $filename

fi

 

 

----------------------------------------------------------------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值