SHELL编程

SHELL编程

一、脚本执行

创建脚本

vi helloworld.sh

#脚本以#!/bin/bash开头(指定解析器)

#!/bin/bash
echo "hello world"
touch 1.txt 2.txt 3.txt
ls -l > 1.txt

执行脚本

第一种方式 分配执行权
chmod u+x helloworld.sh
./helloworld.sh
/mysh/helloworld.sh
第二种方式 可以没有执行权 
bash  helloworld.sh
sh hellowrold.sh

二、变量

1.系统变量

使用set可以查看所有系统变量

BASH=/bin/bash
HOME=/root
HOSTNAME=linux01
JAVA_HOME=/opt/apps/jdk1.8.0_191
PATH=/usr/local/sbin:/usr/local

2. 自定义变量

变量定义 
	变量名=变量值  #注意不能有空格
删除变量 
	unset 变量名 
声明常量 readonly变量,不能使用unset变量

name=zss
name=lss  改值
age=23
gender=M
readonly  USERNAME=Ly 不可变的变量  常量 

取值 
$name
${name}
"$name" 
'$name' ---> $name的字符串
注意字符串的拼接

echo $name    lss
echo ${name}  lss
echo "$name"aaa lssaaa  ""号中取变量的值可以正常取出  
echos '$name'aaa  $nameaaa ''号中取不出来变量的值 就是$name字符串 单引号会将所有特殊字符脱意

3.export和source

export  username=lisi 将变量的范围作用在所有的子bash中
source  将子bash定义的变量 作用在当前bash   
export 修饰的变量的作用域是 当前和所有的子进程
source 将子进程中的变量    拉取到当前

4 特殊变量

$1  $2  $n  ${10}  接收单个参数
$*   接收所有参数 
$@   接收所有参数
$#   参数的个数 
$?    接收上个命令执行的结果  0 执行成功   非0的是执行失败 

接收单个参数  一直到$9都可以 10以上 ${10}
vi args01.sh
#!/bin/bash
echo "接收的所有参数$1 $2 $3"
touch $1 $2 $3 

sh args01.sh 1.txt 2.txt 3.txt
接收所有参数
$*   接收所有参数 
$@   接收所有参数
$#   参数的个数
$?    接收上个命令执行的结果  0 执行成功   非0的是执行失败 

vi args02.sh

#!/bin/bash
echo "接收参数的个数$*"
echo "接收参数的个数$#"
touch $*

#!/bin/bash
echo "接收参数的个数$@"
echo "接收参数的个数$#"
touch $@

sh args02.sh 1.java 2.java

5.read交互

#!/bin/bash
read -t 10 -p '请输入您的用户名:' username   #username用来接收用户输入的用户名  -t 10代表10秒不输退出
read -t 10 -p '请输入您的密码:' password
echo "$username"
echo "$password"

6.条件判断

**&&和||**
&&:用来执行条件成立后执行的命令
||:用来执行条件不成立后的执行命令

ping windows && echo yes || echo no    windows能ping通 输出yes 不能ping通输出no
ls && echo yes || echo no  ls执行成功 输出yes 执行不成功输出no

7.if语句判断

单条件判断
if [ 条件 ]
 then 
 	执行
fi

互斥条件判断
if [ 条件 ]
then 
	程序
else 
	程序
fi

#!/bin/bash
read -p '请输入您的年龄:' AGE
if [ $AGE -ge 18 ]
  then
        echo "你成年了可以看片了"
  else
        echo "你还未成年 滚蛋"
fi

#判断传入的参数 $1是否存在 存在打印值 不存在 则输出不存在
#!/bin/bash
name=$1
if [ $name ]
    then
        echo "$name"
    else
        echo "name不存在"
fi

多条件判断
if [ 条件1 ]
  then 
  	  执行 
 elif [ 条件2 ]
  then 
  	 执行
 ...
 else 
 	执行	
fi

#!/bin/bash
if [ $1 -ge 90 -a $1 -le 100 ]
        then
             echo  "优秀"
elif [ $1 -ge 80 -a $1 -lt 90 ]
        then
              echo  "良好"
elif [ $1 -ge 60 -a $1 -lt 80 ]
        then
             echo  "及格"
elif [ $1 -ge 0 -a $1 -lt 60 ]
        then
              echo "潜力非常大"
else
        echo "分数有误"
fi

8.case选择语句

#!/bin/bash
read -p '请输入一个数字(1-7):' NUM
case  $NUM in
1 )
	echo "星期一"
	;;
2 ) 
	echo "星期二"
	;;
3 ) 
	echo "星期三"
	;;
4 ) 
	echo "星期四"
	;;
5 ) 
	echo "星期五"
	;;
6 ) 
	echo "星期六"
	;;
7 ) 
	echo "星期日"
	;;
* ) 
	echo "你瞎啊"
	;;
esac

三、循环

for循环

for (( 初始化表达式;布尔表达式;步进表达式 )) 
	do 
		程序 
	done
#!/bin/bash
for (( i=0 ;i<=100;i++ ))
	do 
		echo "$i"
	done
#!/bin/bash
sum=0
for(( i=0;i<=100;i++))
	do 
		sum=$[$sum+$i]
	done
echo $sum

for 变量 in  值1 值2 值3
do
	程序
done
或者写成一行 
for 变量 in 值1 值2 值3 ; do 程序 ; done

#!/bin/bash
for N in $*
do 
	echo $N
done

for循环案例:在每台机器的根目录下 创建一个当前日期的文件夹 如果文件夹已存在则删除 创建 如果不存在则创建

#!/bin/bash
for hostname in linux01 linux02 linux03   #linux0{1..3}   `cat workers`  
do 
	echo "连接$hostname"
	ssh $hostname  "if [ -e /`date +%Y-%m-%d` ]
					then
					  echo "先删除再创建"
                    	rm -rf /`date +%Y-%m-%d`
                    	mkdir /`date +%Y-%m-%d`
                      else
                      	echo "直接创建文件夹"
                      	 mkdir /`date +%Y-%m-%d`
                     fi; exit"
     echo "退出$hostname"
done


vi workders
linux01
linux02
linux03

while循环

while [ 条件判断式 ] 
  do 
程序
...
  done
  #!/bin/bash

案例

num=1
while [ $num -le $1 ]
do 
	echo "$num"
	#num=$[$num+1]
	let num++
	sleep 1  #睡眠1秒
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值