linuxc week2 (shell脚本)

一、如何创建脚本

1、新建一个文件(后缀为.sh)

2、编辑该文件

vim 1.sh

3、运行的时候没有可执行权限,需要人为去添加

chmod 777 1.sh

4、运行

./1.sh

二、变量

2.1用户自定义变量

shell允许用户建立  变量存储类型

注意:任何赋给变量的值都被shell解释为一串字符

命名规范:

  1. 由数字、字母、下划线组成
  2. 首字母不能为数字
  3. shell中的变量一般用大写表示   

注意:

  1. 要取用一个变量的值时,在变量名前加$
  2. 在赋值时,等号的左右两侧不能有空格

2.2预定义变量

$#:包含命令行参数的个数

$@:包含所有命令行参数

$*:包含所有命令行参数

$?:包含前一个命令的退出状态,正常退出返回0,反之为非0(shell中0为真,非0为假)

$$:包含正在执行的进程的ID号

 

 三、shell程序和语句

3.1说明性语句

注释:#

3.2功能性语句

输出、输入

 3.3算术运算

expr主要用于进行简单的整数的算术运算、+、-、\*、/、%

 注意:expr与变量以及变量与运算符之间必须有空格

四、text

4.1字符串测试

s1 = s2 测试两个字符串的内容是否完全一样

s1 != s2 测试两个字符串的内容是否有差异

-z s1 测试s1字符串的长度是否为0

-n s1 测试s1字符串的长度是否不为0

 

 注意:“[”的右边,以及”]“的左边以及等号的左右两侧必须有空格

4.2整数测试

a -eq b   测试a与b是否相等

a -ne b   测试a与b是否不相等

a -gt b   测试a是否大于b

a -ge b   测试a是都大于等于b

a -lt b   测试a是否小于b

a -le b   测试a是否小于等于b

 4.3文件测试

-d name  测试name是否为一个目录

-f name  测试name是否为普通文件

-L name  测试name是否为链接文件

-c name  测试name是都为字符设备文件

-r name  测试name文件是否存在且为可读

-w name  测试name文件是否存在且可写

-x name  测试name文件是否存在且可执行

-s name 测试name文件是都存在且长度不为0

f1 -nt f2  测试f1是否比f2更新

f1 -ot f2  测试f1是否比f2更旧

 五、选择、循环语句

5.1if多分支选择

if [ 表达式1 ]

then

语句1

elif [ 表达式2 ]

then

语句2

.............

elif[ 表达式n ]

then

语句n

else

语句n+1

fi 

5.2case语句

case 字符串变量 in

        模式1)

            语句1

            ;;

        模式2)

           语句2

             ;;

       .................

        模式n)

           语句n

           ;;

            *)

            语句n+1

            ;;

esac

 5.3for循环语句

for 变量名 in 单词表

do

      语句

done

案例:打印9*9乘法表

 5.4while循环语句

while [表达式]

do

      语句

done

案例:打印9*9乘法表

 六、函数

6.1定义

方式1:

函数名()

{

}

方式2:

function 函数名()

{

}

注意:一般使用的是方式2

6.2调用

方式1:

变量名=`函数名 参数列表`

 注意:

  1. 子函数中的所有标准输出传递给了主程序中的变量
  2. 子函数中的$n并非shell中的$n

方式2:

函数名 参数列表

注意:一般使用的是方式2

 七、示例

  1. 判断用户主目录是否有file-dir和dir-dir目录如果这两个目录存在,询问是否删除这两个目录 如果用户的是Y,将这两个目录删除,重新创建这两个目录  如果是N,取消删除  如果上述的目录不存在,则创建这两个目录
  2. 请用户输入一个路径,将这个路径下的文件拷贝到file-dir这个目录,将这个路径下的目录拷贝到dir-dir目录      
  3. 统计拷贝的文件和目录的个数
#!/bin/bash 

for dir in $HOME/file-dir $HOME/dir-dir
do
	if [ -d $dir ]
	then
		read -p "是否删除这两个目录!(Y,N)
		" op
		case $op in
			'Y')
				rm -r $dir
				echo "删除成功"
				;;
			'N')
				echo "取消删除"
		esac
	else
		mkdir $dir
		echo "创建成功!"
	fi
done


filecount=0
dircount=0
read -p "请输入一个路径:
" pathname
flist=`ls $pathname`
for file in $flist
do
	if [ -f $pathname/$file ]
	then
		cp $pathname/$file $HOME/file-dir
	filecount=`expr $filecount + 1`
	elif [ -d $pathname/$file ]
	then
		cp -r $pathname/$file $HOME/dir-dir
		dircount=`expr $dircount + 1`
	fi
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

じ刂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值