python tkinter entry默认值_Python ---(六)Tkinter窗口组件:Entry

The Tkinter Entry Widget

##简介

Entry(输入框)组件通常用于获取用户的输入文本。

##何时使用 Entry 组件?

Entry 组件仅允许用于输入一行文本,如果用于输入的字符串长度比该组件可显示空间更长,那内容将被滚动。这意味着该字符串将不能被全部看到(你可以用鼠标或键盘的方向键调整文本的可见范围)。

如果你希望接收多行文本的输入,可以使用 Text 组件(后面介绍)。

##用法

使用代码为 Entry 组件添加文本,可以使用 insert() 方法。如果要替换当前文本,可以先使用 delete() 方法,再使用 insert() 方法实现:

from tkinter import *

master = Tk()

e = Entry(master)

e.pack(padx=20, pady=20)

e.delete(0, "end")

e.insert(0, "默认文本...")

master.mainloop()

467efab63d1db6ea0309292aead64501.png

获取当前输入框的文本,可以使用 get() 方法:

s = e.get()

你也可以绑定 Entry 组件到 Tkinter 变量(StringVar),并通过该变量设置和获取输入框的文本:

v = StringVar()

e = Entry(master, textvariable=v)

e.pack()

v.set("老甲鱼")

s = v.get()

下边的例子演示将 Entry 组件和 Button 组件配合,点击 “获取信息” 按钮时自动清空输入框并将内容输出:

from tkinter import *

root = Tk()

Label(root,text="作品").grid(row=0,column=0)

Label(root,text="作者").grid(row=1,column=0)

e1 = Entry(root)

e2 = Entry(root)

e1.grid(row=0,column=1,padx=10,pady=5)

e2.grid(row=1,column=1,padx=10,pady=5)

def show():

print("作品:《%s》" %e1.get())

print("作者:%s" %e2.get())

e1.delete(0, "end")

e2.delete(0, "end")

Button(root,text = "获取信息",width = 10,command = show)\

.grid(row = 3,column = 0,sticky = W,padx =10,pady =5)

Button(root,text = "退出", width = 10,command = root.quit)\

.grid(row = 3,column = 1,sticky = E,padx =10,pady =5)

mainloop()

b9782c649e099c7d66faf7cfe65c15c1.png

48209bd5e0d76d698ce876c82e0d89d3.png

20817edac3467426a3158084eed9f486.png

(代码解析:首先就是先来两个Label标签,分别是作品和作者,然后,刚刚说了这次使用(网格)grid()来布局组件,grid的话他是允许用表格的形式来管理组件的位置,他的选项有row和column分别代表的是行和列,作品这个组件的位置就是在0行0列,作者的位置就是在0行0列,如上图的分布

接着是两个输入框,都是放在root窗口,再使用grid来布局,这两个输入框组件,上图可以看到,他们是位置分别就是0行1列和1行1列,然后再通过padx和pady设置一下内边距,好看一些

接着是要添加两个按钮,首先是第一个按钮是获取信息,然后给他设置一下宽度,在设置一个command选项,当按钮点下时就去执行show方法,那么show方法就是输入框对象e1和e2通过get方法获取到文本框的内容,然后输出,输出完后在用delete方法情况输入框,然后退出的按钮的command就设置root.quit就可以了,即调用根方法的quit方法,

接着就是把这两个按钮摆放好,即分别是2行0列和2行1列,但是要求一个按钮偏左边,一个靠右边,这里就需要设置一个sticky的属性,sticky就是控制组件在 grid 分配的空间中的位置,他的值和之前的anchor很相似,同样使用"n", “e”, “s”, “w” 以及它们的组合来定位(ewsn代表东西南北,上北下南左西右东),然后在设置一下padx和pady他就不会挨着墙角了)

※运行成功后点击退出是没反应的,退不来,因为我们使用的 IDLE 也是使用 tkinter 写出来的,他们这里会发生冲突,双击你源文件打开,用系统cmd窗口来运行就可以正常退出,如果想在IDLE可以退出,可以使用root.destroy

最后需要提到的是 Entry 组件允许通过以下几种方式指定字符的位置:

※数字索引号

※"anchoe"

※"end"

※"insert"

鼠标坐标("@x")

数字索引号:常规的 Python 索引号,从 0 开始

"anchor":对应第一个被选中的字符(如果有的话)

"end":对应已存在文本的后一个位置

"insert":对应插入光标的当前位置

鼠标坐标("@x"):x 是鼠标位置与 Entry 左侧边缘的水平距离,这样就可以通过鼠标相对地定位字符的位置

##参数

Entry(master=None, **options) (class)

master – 父组件

**options – 组件选项,下方表格详细列举了各个选项的具体含义和用法:

选项

含义

background

1. 设置 Entry 的背景颜色

2. 默认值由系统指定

bg

跟 background 一样

borderwidth

1. 设置 Entry 的边框宽度

2. 默认值是 1 或 2 像素

bd

跟 borderwidth 一样

cursor

1. 指定当鼠标在 Entry 上飘过的时候的鼠标样式

2. 默认值由系统指定

exportselection

1. 指定选中的文本是否可以被复制到剪贴板

2. 默认值是 True

3. 可以修改为 False 表示不允许复制文本

font

1. 指定 Entry 中文本的字体

2. 默认值由系统指定

foreground

1. 设置 Entry 的文本颜色

2. 默认值由系统指定

fg

跟 foreground 一样

highlightbackground

1. 指定当 Entry 没有获得焦点的时候高亮边框的颜色

2. 默认值由系统指定

highlightcolor

1. 指定当 Entry 获得焦点的时候高亮边框的颜色

2. 默认值由系统指定

highlightthickness

1. 指定高亮边框的宽度

2. 默认值是 1 或 2 像素

insertbackground

指定输入光标的颜色

insertborderwidth

1. 指定输入光标的边框宽度

2. 如果被设置为非 0 值,光标样式会被设置为 RAISED

3. 小甲鱼温馨提示:将 insertwidth 设置大一点才能看到效果哦

insertofftime

1. 该选项控制光标的闪烁频率(灭)

2. 单位是毫秒

insertontime

1. 该选项控制光标的闪烁频率(亮)

2. 单位是毫秒

insertwidth

1. 指定光标的宽度

2. 默认值是 1 或 2 像素

invalidcommand

1. 指定当输入框输入的内容“非法”时调用的函数

2. 也就是指定当 validateCommand 选项指定的函数返回 False 时的函数

3. 详见本内容最下方小甲鱼关于验证详解

invcmd

跟 invalidcommand 一样

justify

1. 定义如何对齐输入框中的文本

2. 使用 "left","right" 或 "center"

3. 默认值是 "left"

relief

1. 指定边框样式

2. 默认值是 "sunken"

3. 其他可以选择的值是 "flat","raised","groove" 和 "ridge"

selectbackground

1. 指定输入框的文本被选中时的背景颜色

2. 默认值由系统指定

selectborderwidth

1. 指定输入框的文本被选中时的边框宽度(选中边框)

2. 默认值由系统指定

selectforeground

1. 指定输入框的文本被选中时的字体颜色

2. 默认值由系统指定

show

1. 设置输入框如何显示文本的内容

2. 如果该值非空,则输入框会显示指定字符串代替真正的内容

3. 将该选项设置为 "*",则是密码输入框

state

1. Entry 组件可以设置的状态:"normal","disabled" 或 "readonly"(注意,它跟 "disabled" 相似,但它支持选中和拷贝,只是不能修改,而 "disabled" 是完全禁止)

2. 默认值是 "normal"

3. 注意,如果此选项设置为 "disabled" 或 "readonly",那么调用 insert() 和 delete() 方法都会被忽略

takefocus

1. 指定使用 Tab 键可以将焦点移动到输入框中

2. 默认是开启的,可以将该选项设置为 False 避免焦点在此输入框中

textvariable

1. 指定一个与输入框的内容相关联的 Tkinter 变量(通常是 StringVar)

2. 当输入框的内容发生改变时,该变量的值也会相应发生改变

validate

1. 该选项设置是否启用内容验证

2. 详见本内容最下方小甲鱼关于验证详解

validatecommand

1. 该选项指定一个验证函数,用于验证输入框内容是否合法

2. 验证函数需要返回 True 或 False 表示验证结果

3. 注意,该选项只有当 validate 的值非 "none" 时才有效

3. 详见本内容最下方小甲鱼关于验证详解

vcmd

跟 validatecommand 一样

width

1. 设置输入框的宽度,以字符为单位

2. 默认值是 20

3. 对于变宽字体来说,组件的实际宽度等于字体的平均宽度乘以 width 选项的值

xscrollcommand

1. 与 scrollbar(滚动条)组件相关联

2. 如果你觉得用户输入的内容会超过该组件的输入框宽度,那么可以考虑设置该选项

3. 使用方法可以参考:Scrollbar 组件

##方法

delete(first, last=None)

— 删除参数 first 到 last 范围内(包含 first 和 last)的所有内容

— 如果忽略 last 参数,表示删除 first 参数指定的选项

— 使用 delete(0, END) 实现删除输入框的所有内容

get()

— 获得当前输入框的内容

icursor(index)

— 将光标移动到 index 参数指定的位置

— 这同时也会设置 INSERT 的值

index(index)

– 返回与 index 参数相应的选项的序号(例如 e.index(END))

insert(index, text)

— 将 text 参数的内容插入到 index 参数指定的位置

— 使用 insert(INSERT, text) 将 text 参数指定的字符串插入到光标的位置

— 使用 insert(END, text) 将 text 参数指定的字符串插入到输入框的末尾

scan_dragto(x)

— 见下方 scan_mark(x)

scan_mark(x)

— 使用这种方式来实现输入框内容的滚动

— 需要将鼠标按下事件绑定到 scan_mark(x) 方法(x 是鼠标当前的水平位置),然后再将 事件绑定到 scan_dragto(x) 方法(x 是鼠标当前的水平位置),就可以实现输入框在当前位置和 sacn_mack(x) 指定位置之间的水平滚动

select_adjust(index)

— 与 selection_adjust(index) 相同,见下方解释

select_clear()

— 与 selection_clear() 相同,见下方解释

select_from(index)

— 与 selection_from(index) 相同,见下方解释

select_present()

— 与 selection_present() 相同,见下方解释

select_range(start, end)

— 与 selection_range(start, end) 相同,见下方解释

select_to(index)

— 与 selection_to(index) 相同,见下方解释

selection_adjust(index)

— 该方法是为了确保输入框中选中的范围包含 index 参数所指定的字符

— 如果选中的范围已经包含了该字符,那么什么事情也不会发生

— 如果选中的范围不包含该字符,那么会从光标的位置将选中的范围扩展至该字符

selection_clear()

— 取消选中状态

selection_from(index)

— 开始一个新的选中范围

— 会设置 ANCHOR 的值

selection_present()

— 返回输入框是否有处于选中状态的文本

— 如果有则返回 True,否则返回 False

selection_range(start, end)

— 设置选中范围

— start 参数必须必 end 参数小

— 使用 selection_range(0, END) 选中整个输入框的所有内容

selection_to(index)

– 选中 ANCHOR 到 index 参数的间的所有内容

xview(index)

– 该方法用于确保给定的 index 参数所指定的字符可见

– 如有必要,会滚动输入框的内容

xview_moveto(fraction)

– 根据 fraction 参数给定的比率调整输入框内容的可见范围

– fraction 参数的范围是 0.0 ~ 1.0,0.0 表示输入框的开始位置,1.0 表示输入框的结束位置

xview_scroll(number, what)

– 根据给定的参数水平滚动输入框的可见范围

– number 参数指定滚动的数量,如果是负数则表示反向滚动

– what 参数指定滚动的单位,可以是 UNITS 或 PAGES(UNITS 表示一个字符单元,PAGES 表示一页)

##关于验证详解

由于查看了不少资料,很多在这里都没有解释清楚,所以这里单独列出来详细讲解下。

Entry 组件是支持验证输入内容的合法性的,比如要求输入数字,你输入了字母那就是非法。实现该功能,需要通过设置 validate、validatecommand 和 invalidcommand 选项。

首先启用验证的“开关”是 validate 选项,该选项可以设置的值有:

含义

'focus'

当 Entry 组件获得或失去焦点的时候验证

'focusin'

当 Entry 组件获得焦点的时候验证

'focusout'

当 Entry 组件失去焦点的时候验证

'key'

当输入框被编辑的时候验证

'all'

当出现上边任何一种情况的时候验证

'none'

1. 关闭验证功能

2. 默认设置该选项(即不启用验证)

3. 注意,是字符串的 'none',而非 None

上面是他可以设置的值有哪些,表示在什么情况下去验证,去调用验证函数,而验证函数是在validatecommand里边指定的,跟button里边的command选项是一样的道理,validatecommand函数只能返回 True 或 False 表示验证的结果。一般情况下验证函数只需要知道输入框的内容即可,可以通过 Entry 组件的 get() 方法获得该字符串。

下边的例子中,在第一个输入框输入“老甲鱼”,并通过 Tab 键将焦点转移到第二个输入框的时候,验证功能被成功触发:

from tkinter import *

master = Tk()

def test():

if e1.get() == "老甲鱼":

print("正确!")

return True

else:

print("错误!")

e1.delete(0, "end")

return False

v = StringVar()

e1 = Entry(master, textvariable=v, validate="focusout", validatecommand=test)

e2 = Entry(master)

e1.pack(padx=10, pady=10)

e2.pack(padx=10, pady=10)

master.mainloop()

8f1876296d3c82a1e4693ea50e056b34.png

2559e2687fb2abf5962c9b0536224bba.png

然后,invalidcommand 选项指定的函数只有在 validatecommand 的返回值为 False 的时候才被调用。

下边的例子中,在第一个输入框输入“老甲鱼”,并通过 Tab 键将焦点转移到第二个输入框,validatecommand 指定的验证函数被触发并返回 False,接着 invalidcommand 被触发:

from tkinter import *

master = Tk()

def test():

if e1.get() == "老甲鱼":

print("正确!")

return True

else:

print("错误!")

e1.delete(0, "end")

return False

def test2():

print("我被调用了......")

return True

v = StringVar()

e1 = Entry(master, textvariable=v, validate="focusout",\

validatecommand=test, invalidcommand=test2)

e2 = Entry(master)

e1.pack(padx=10, pady=10)

e2.pack(padx=10, pady=10)

master.mainloop()

26561f3e9f99812c850ab8972155378d.png

c9cd0c4c4789f182fb8f1532c6b53373.png

最后,其实 Tkinter 还有隐藏技能,不过需要冷却才能触发,请听老甲鱼一一道来…

Tkinter 为验证函数提供一些额外的选项:

Tkinter 为验证函数提供一些额外的选项:

额外选项

含义

'%d'

操作代码:0 表示删除操作;1 表示插入操作;2 表示获得、失去焦点或 textvariable 变量的值被修改

'%i'

1. 当用户尝试插入或删除操作的时候,该选线表示插入或删除的位置(索引号)

2. 如果是由于获得、失去焦点或 textvariable 变量的值被修改而调用验证函数,那么该值是 -1

'%P'

1. 当输入框的值允许改变的时候,该值有效

2. 该值为输入框的最新文本内容

'%s'

该值为调用验证函数前输入框的文本内容

'%S'

1. 当插入或删除操作触发验证函数的时候,该值有效

2. 该选项表示文本被插入和删除的内容

'%v'

该组件当前的 validate 选项的值

'%V'

1. 调用验证函数的原因

2. 该值是 'focusin','focusout','key' 或 'forced'(textvariable 选项指定的变量值被修改)中的一个

'%W'

该组件的名字,不过是 tk 变量在内部注册的名字,为一串数字。

为了使用这些选项,你可以这样写:validatecommand=(f, s1, s2, …)

其中,f 就是你“冷却后”的验证函数名,s1、s2、s3 这些就是上面表里额外的选项,这些选项会作为参数依次传给 f 函数。我们刚刚说了,使用隐藏技能前需要冷却,其实就是调用 register() 方法将验证函数包装起来:

(这个f也就是刚刚的上个例子validatecommand=test方法,在这里直接套进去不行,因为这样子Tkinter他不认,认不了你,所以需要先调用register() 方法将验证函数先包装起来,包装成Tkinter能够认出来的东西)

from tkinter import *

master = Tk()

v = StringVar()

def test(content, reason, name):

if content == "老甲鱼":

print("正确!")

print(content, reason, name)

return True

else:

print("错误!")

print(content, reason, name)

return False

testCMD = master.register(test)

e1 = Entry(master, textvariable=v, validate="focusout", validatecommand=(testCMD, '%P', '%v', '%W'))

e2 = Entry(master)

e1.pack(padx=10, pady=10)

e2.pack(padx=10, pady=10)

master.mainloop()

当我故意输入“小甲鱼”的时候,DUANG的一下,是错误的,后来我输入“老甲鱼”,嘿,又正确了:

2488c7ed9ef93df177c5f461dd8c31dc.png

(解析:对比上个例子可以发现,test方法不再是没有参数的方法了,他有三个参数,是在Entry组件的validatecommand选项中出现:validatecommand=(testCMD, ‘%P’, ‘%v’, ‘%W’),第一个%P查看上面的表可以知道是表示说他的值是输入框的最新文本内容,就是当输入框的值有改变的时候,%P就会有内容作为参数传到test方法的content参数,另外两个也是类似的道理,他们三个作为额外选项,作为参数传给test方法,然后%v就是表示该组件当前的 validate 选项的值,%W就是表示该组件的名字,在这里该组件就是e1,输出的就是e1在Tkinter里边注册的名字)

转载博客:https://blog.csdn.net/w15977858408/article/details/104160155

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 静态块初始化_简单了解java中静态初始化块的执行顺序

这篇文章主要介绍了简单了解java中静态初始化块的执行顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下在java中,其应该是先于所有的方法执行。下面是测试代码:public class Test1 {st…

java 常量区存放 new_java---堆、栈、常量池的存储数据

说到Java中堆、栈和常量池,首先还是看看他们各自存放的数据类型吧!栈:Java的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)也叫静态存储区。堆区:(存放所有new出来的对象;)1.存储的全部是对象&#xff0c…

log加时间 securecrt_SecureCRT配置自动记录日志

很多人用SecureCRT时,希望自动记录日志,一个是方便以后查阅,一个是对自己的操作有个记录。可以看看自己做了什么操作,有时甚至可以看看之前是不是犯了什么错,是个很不错的功能。设置很简单,还可以根据连接的…

java泛型改进_java泛型高级篇 - 真正理解协变与逆变 | 鱼儿的博客

无论你是否听过java泛型的协变与逆变,我们直接进入例子,一起来看一下java泛型比较高级的用法。例子1:copy函数第1个例子我们实现copy函数,它将List中的元素复制到List中。JavaList src Arrays.asList(1,2,3,4,5);List dst new A…

java实训遇到问题解决_「instantiationexception」关于java出现 java.lang.InstantiationException异常的分析与解决方案 - seo实验室...

instantiationexceptionjava.lang.instantiationexception 是指不能实例化某个对象,一般在我们使用java反射机制去创建某个对象的时候实例化到了一个抽象类或者接口(java中抽象类和接口是不能被实例化),而今天我遇到的则是我在使用反射机制实例化某个持久…

java对外发布接口文档_java之接口文档规范

一、xxxxxx获取指定任务爬取的所有url的接口接口名称:xxxxxx获取指定任务爬取的所有url的接口访问链接:http://IP:PORT/crwalTask/findUrlExceptionById?ctIdctIdVal&timetimeVal&limitlimitVal传入参数类型:String,int参数内容:返回…

java画好看坦克_坦克大战第一节——画出自己的坦克(新手篇)

刚刚开始学习java,对java不是很熟悉,但是自己的兴趣挺喜欢java。现在自己在自学java做一个小游戏,坦克大战。自己现在完成了画出自己的坦克和坦克的移动方向。希望各位大神指导一下我这个刚刚学java的新手小白。我会每完成一个阶段&#xff0…

java中timer类包_Java~util包中Timer的使用, 演示cancel方法 和 对比schedule和scheduleAtFixedRate方法...

TimerTimer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类执行计划任务的代码要放人TimerTask的子类中,因为TimerTask是一个抽象类。而且要重写其run方法 因为这是一个抽象方法.常见问题任务执行完了, 但进程并没有销毁,通过源码查看构造方…

centos eclipse java_CentOS7 安装 Eclipse

咳咳, 虽然大神的 Linux 都是命令行的, 但是谁让 LZ 是 LJ, 桌面开俩终端不觉得更好么。。。CentOS7 安装 Eclipse, 比在 Window 系统下安装 Eclipse 要复杂得多。。参考 : https://segmentfault.com/a/11900000026517…

java opencv orb_opencv python ORB算法

理论ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法,这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFTor SURF”的文章中提出.ORB算法分为两部分&#…

php中define的参数_php中define的用法有哪些

php中define的用法:1、【define()】函数定义一个常量;2、定义常量名称及值,代码为【define(name,value,case_insensitive)】;3、定义一个大小写敏感的常量。php中define的用法:1、define()函数理解1define()函数定义一…

php 登陆微博,PHP调用微博接口实现微博登录的方法示例

在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站。这里以微博登录为例。微博登录包括身份认证、用户关系以及内容传播。允许用户使用微博帐号登录访问第三方网站,分享内容,同步信息。1、首…

2017php行情,2017年蔬菜行情特点及未来蔬菜价格走势分析

2017年蔬菜行情整体特点一、菜价走势前期低迷,后期逐渐回升:1.2017年1~10月的蔬菜平均价处于近3年同期的最低点;2.1~5月菜价创近5年同期最低。南方产区的实心菜花、散菜花、西兰花、团生菜、白萝卜、大白菜&#xff0c…

java实现layui静态表格分页,layui——数据表格分页实例

layui实现数据表格table分页功能,异步加载,表格渲染。总体流程:layui的数据表格设置分页参数开启可以从请求中看到如下图,所以我们需要在后端控制器接收分页数据page和limit进行操作,下面直接上代码分页链接框架&#…

mysql多列 groupby,MySQL多表查询之GroupBy

需求:根据主键id查询到该顾客最近的一次消费记录SQL代码如下:SELECTcbi.id,cbi.mob,cbi.identity_card,bcil.remark,bcil.orders_no,bcil.brand_no,bcil.with_date,bcil.scoreFROMcustomer_base_info cbiLEFT JOIN(SELECTA.customer_id,A.with_date,A.re…

java j2ssh替代jsch,jsch设置ssh协商算法优先级

最近接触jsch这个包,发现在默认情况下,jsch登录ssh的时候,协商的加密算法和mac算法都不是最高优先级的,这个时候需要手动配置一下算法列表,将强度高的调整在算法列表的前面,这样ssh链接的时候,如…

java 截取汉字首字母,java 取汉字首字母

有时候,可能会有一些类似这样的需求:对于这样的效果,我们可以有类似这样的解决方案:package bys.utils;import java.io.UnsupportedEncodingException;/*** Created by toutou on 2014/2/21*/public class ChineseCharacterHelper…

linux操作系统网络,网络安装linux操作系统

网络安装安装的准备首先配仓库然后需要安装的服务Yun y install tftp-serverYum y install dhcp开始实验配仓库安装tfpt包并进行配置Tftp-server dhcp tftp后,会在/var/lib/tftpboot这个文件,这个文件是作为linux安装的引导文件,将/mnt/isoli…

Linux使用ftp传输10g的文件,Ubuntu 16.04 安装ftp服务器传输文件

最近在搞深度学习,老师比较宝贝他的服务器,要求我以后负责管理服务器。往后所有要使用服务器的人都必须向我申请账号,然后只允许客户端访问,使用文件传输软件传输文件。像我这样一个Linux菜逼,这种要求不是赶鸭子上架嘛…

linux创建文件内容三行,shell之创建文件及内容的方法示例

shell之创建文件夹:[rootvbox-nginx shell_command]# vi ./mkdir.sh#!/bin/shparentDir"/media/sf_Project/self/smarty-frame/application/$1"fileName$2dirAndName$parentDir/$fileNameif [ ! -d "$dirAndName" ];thenmkdir $dirAndNameecho …